gpt4 book ai didi

c# - 在 C# 中计算 future 纪元时间

转载 作者:可可西里 更新时间:2023-11-01 03:11:48 25 4
gpt4 key购买 nike

我能够找到示例代码来获取 Linux Epoch 中的当前时间戳(自 1970 年 1 月 1 日午夜以来的秒数),但是我无法找到关于如何计算 future Epoch 的示例,比如例如从现在开始 10 分钟,那么我如何计算 Linux Epoch 中的 future 时间?

最佳答案

当您想知道 Windows 系统上 .Net 中的 Unix 纪元时间时,有一个有趣的转折。

对于几乎所有的实际情况,假设当前时间已经过了 Unix 纪元,你确实可以采用

System.TimeSpan timeDifference = DateTime.UTCNow - 
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
long unixEpochTime = System.Convert.ToInt64(timeDifference.TotalSeconds);

但是,

Unix 大纪元时间被定义为“......一个描述时间点的系统,定义为自 1970 年 1 月 1 日协调世界时 (UTC) 午夜以来经过的秒数,不计算闰秒 。” (1)

从 1972 年开始,UTC 就包含了“闰秒”,到目前为止我们总共有 25 个。 (2)

.Net DateTime 没有闰秒的规定,而是简单地依赖操作系统时间。 Windows 很幸运地不知道闰秒 (3)(4),因此当它从 NTP 主机接收到时间时,它只会有时间的概念(我相信非域连接机器的默认值是 time.windows.com ) ,这可能提供 UTC,包括闰秒。

这意味着为了从 Unix 纪元开始正确计算实际秒数,对于依赖于此的应用程序,您可能应该将闰秒添加到上面获得的结果中。您必须跟踪每次要添加的秒数,因为闰秒不会提前很长时间宣布 (2)。但是,由于 Unix Epoch Time 的定义明确排除了闰秒,因此您可以放心地忽略这一点,只需根据当前 UTC 时间重新计算秒数即可。

有时,闰秒确实会导致软件困惑 (5)。关于是保留还是取消这种做法的争论正在进行中 (6)(7)(8)。

回答时的最后一个闰秒发生在 2012 年 7 月 1 日 (9) 并导致各种站点和应用程序出现问题 (10)

(1) http://en.wikipedia.org/wiki/Unix_time

(2) http://en.wikipedia.org/wiki/Leap_second

(3) http://support.microsoft.com/kb/909614

(4) http://www.meinberg.de/english/info/leap-second.htm

(5) http://www.networkworld.com/news/2009/010609-leap-second-snafu-affects-oracle.html

(6) http://www.pcworld.idg.com.au/article/358024/time_waits_no_one_leap_seconds_may_cut/

(7) http://queue.acm.org/detail.cfm?id=1967009

(8) http://arxiv.org/abs/1106.3141

(9) http://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat

(10) http://arstechnica.com/business/2012/07/one-day-later-the-leap-second-v-the-internet-scorecard/

(原回答有误,幸好被下面的评论者Edward Brey和Mormegil发现了)

关于c# - 在 C# 中计算 future 纪元时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/906034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com