【问题标题】:What is the equivalent of NSDate's 'timeIntervalSince1970' in C#C# 中 NSDate 的 'timeIntervalSince1970' 的等价物是什么
【发布时间】:2017-05-21 03:09:30
【问题描述】:

我需要以自 1970 年以来的秒数形式存储日期。

通过使用 Foundation 的 NSDate,我获得了自 1970 年以来使用 Swift 的秒数:

NSDate().timeIntervalSince1970

也许这是一个愚蠢的问题,但为什么这是 double 不应该是 int

这个方法在 C# 中的等价物是什么?

我不确定用什么来获得相同的值。

【问题讨论】:

标签: c#


【解决方案1】:
TimeSpan t = (DateTime.UtcNow – new DateTime(1970, 1, 1));
long timestamp  = (long) t.TotalSeconds;

我使用UtcNow 属性来确保时间戳是相同的,无论这段代码在哪个时区运行。

此外,请使用您能找到的最大整数类型,因为当前纪元时间略小于 32 位有符号整数,并且您希望代码能够面向未来。

如果你有 .NET 4.6 或更高版本,试试这个:

 DateTimeOffset.UtcNow.ToUnixTimeSeconds() 

【讨论】:

  • 是 swift NSDate().timeIntervalSince1970;也基于 UTC?
  • Tnx 我接受的答案只有一个子问题。 ToUnixTimeSeconds() 返回 Int 但 .timeIntervalSince1970 返回双精度。这些都是秒数吗?你知道吗?
  • 是的。 Unix 时间定义为自 1970 年 1 月 1 日 UTC 以来的秒数。他们使用 double 的原因与我长期建议的原因相同 - 以避免将来溢出。
  • 啊,所以返回的 double 必须强制转换为 long 数据类型,然后它与 .TotalSeconds 相同
【解决方案2】:

这可能有效。

(DateTime.Now - new DateTime(1970,1,1)).TotalSeconds

这将获取日期并减去 C# (01-01-01:00:00:00) 的默认纪元时间,使其从 01-01-1970 开始。

这很可能是获得相同值的最简单方法。

【讨论】:

  • 为什么你得到毫秒? swift timeIntervalSince1970 是毫秒还是秒?
猜你喜欢
  • 2014-05-08
  • 2023-03-30
  • 2010-09-17
  • 2011-07-26
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多