我正在将Python脚本移植到C#。
目前我遇到了使用
的代码time.time()
根据Python文档,此函数调用返回总计数为秒的浮点数。
将时间作为以秒为单位的浮点数返回 UTC中的纪元。请注意,即使总是返回时间 作为浮点数,并非所有系统都提供更好的时间 精度超过1秒。虽然此功能通常会返回 非递减值,它可以返回比以前更低的值 如果在两次通话之间设置了系统时钟,则呼叫。
如何从CLR获得相同的信息?
答案 0 :(得分:4)
Unix上的“Epoch”的开头是指1970年1月1日。这是一个相当随意的日期,设置为“足够早”,任何查询该日期以来的时间都会得到正数秒。
TimeSpan t = (DateTime.UtcNow -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
float seconds = (float) t.TotalSeconds;
Console.WriteLine (seconds);
答案 1 :(得分:3)
与其他人类似,但我建议您确保在UTC 中使用Unix纪元,以获得理智:
private static readonly DateTime UnixEpoch =
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
...
TimeSpan timeSinceEpoch = DateTime.UtcNow - UnixEpoch;
double seconds = timeSinceEpoch.TotalSeconds;
(请注意,鉴于您显然希望这样,我将值保留为double
。)
或者,使用Noda Time:
// clock would normally be injected, or you could use SystemClock.Instance
Instant instant = clock.Now;
Duration duration = instant - Instant.UnixEpoch;
// Noda Time exposes TotalXyz as long, not double. Go from ticks here
double seconds = ((double) duration.TotalTicks) / NodaConstants.TicksPerSecond;
答案 2 :(得分:1)
我不认为.NET中存在Unix时代的概念,因为Windows不是Unix。但是,在DateTime.Ticks
(来自docs)中有一个类似的概念:
单个刻度表示一百纳秒或一千万分之一 一秒钟一毫秒内有10,000个滴答。
此属性的值表示100纳秒的数量 自0001年1月1日午夜12:00:00起经过的间隔, 代表DateTime.MinValue。它不包括数量 可归因于闰秒的滴答声。
您也可以像其他人建议的那样在DateTime
的实例中创建自己的Unix纪元。
答案 3 :(得分:1)
自Epoch(1970年1月1日)以来的秒数,就这样做:
DateTime now = DateTime.Now;
TimeSpan t = (now - new DateTime(1970, 1, 1).toLocalTime());
int timestamp = (int) t.TotalSeconds;
答案 4 :(得分:0)
来自http://blogs.msdn.com/b/brada/archive/2004/03/20/93332.aspx
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
int timestamp = (int) t.TotalSeconds;
Console.WriteLine (timestamp);