在C#中获得最小的浮点数

时间:2012-02-29 21:22:23

标签: c# datetime

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

目前我遇到了使用

的代码
time.time()

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

  

将时间作为以秒为单位的浮点数返回   UTC中的纪元。请注意,即使总是返回时间   作为浮点数,并非所有系统都提供更好的时间   精度超过1秒。虽然此功能通常会返回   非递减值,它可以返回比以前更低的值   如果在两次通话之间设置了系统时钟,则呼叫。

如何从CLR获得相同的信息?

5 个答案:

答案 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);

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

答案 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);