从C#中的最小值开始获取秒的浮点值



我正在将Python脚本移植到C#。

目前我遇到了使用的代码

time.time()

根据Python文档,此函数调用返回总秒数的浮点值。

将时间返回为以秒为单位的浮点数,自纪元,UTC。请注意,即使总是返回时间作为一个浮点数,并不是所有的系统都能提供更好的时间精度超过1秒。当此函数正常返回时不递减的值,它可以返回比以前更低的值如果系统时钟在两次调用之间被回拨,则调用。

如何从CLR获得相同的内容?

Unix上"大纪元"的开始是指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);

http://blogs.msdn.com/b/brada/archive/2004/03/20/93332.aspx

与其他类似,但我建议您确保在UTC中使用Unix epoch,以保持理智,如果没有其他:

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;

我不认为.NET中有Unix时代的概念,因为Windows不是Unix。然而,DateTime.Ticks(来自文档)中有一个类似的概念:

一个刻度表示一百纳秒或一千万分之一秒。一毫秒内有10000个滴答声。

此属性的值表示100纳秒的数量自0001年1月1日午夜12:00:00起经过的间隔,它表示DateTime.MinValue。它不包括可归因于闰秒的刻度。

您也可以像其他人建议的那样,在DateTime的实例中创建自己的Unix epoch。

对于Epoch(1970年1月1日)以来的秒数,如下所示:

DateTime now = DateTime.Now;
TimeSpan t = (now - new DateTime(1970, 1, 1).toLocalTime());
int timestamp = (int) t.TotalSeconds;

来自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);

最新更新