如何计算纪元日?

Duk*_*gal 2 datetime epoch

计算纪元日就像采用纪元秒并除以86400一样简单吗?或者是否需要进行一些特殊计算以考虑夏令时或闰年或其他因素?

更新:"纪元日"是指自纪元以来的天数.

Jon*_*ler 5

POSIX定义您可以通过将时间戳除以86400来推断自大纪元(1970-01-01 00:00:00Z)以来的天数.这故意并有意识地忽略了闰秒.

查看自大纪元以来的定义:

4.15秒自大纪元以来

一个值,它近似于自Epoch以来经过的秒数.协调世界时名称(以秒(tm_sec),分钟(tm_min),小时(tm_hour),自1月1日(tm_yday)以及日历年减去1900(tm_year)开始的时间与以秒表示的时间相关Epoch,根据下面的表达式.

如果年份<1970或值为负,则关系未定义.如果年份是>=1970和值非负,该值是根据C语言的表达,相关的协调世界时名称,其中tm_sec,tm_min,tm_hour,tm_yday,和tm_year都是整数类型:

tm_sec + tm_min*60 + tm_hour*3600 + tm_yday*86400 +
     (tm_year-70)*31536000 + ((tm_year-69)/4)*86400 -
     ((tm_year-1)/100)*86400 + ((tm_year+299)/400)*86400
Run Code Online (Sandbox Code Playgroud)

未指定自Epoch以来的实际时间与秒的当前值之间的关系.

自Epoch以来对于与当前实际时间的期望关系对齐的秒值的变化是如何实现定义的.如自大纪元以来的秒数所示,每天应该恰好以86400秒计算.

注意:表达式的最后三个项在每年的一天中添加,这是从大纪元开始的第一个闰年开始的闰年之后.第一学期从1973年开始每4年增加一天,第二学期从2001年开始每100年减去一天,第三学期从2001年开始每400年增加一天.公式中的分数是整数除法; 也就是说,丢弃余数只留下整数商.