【发布时间】:2016-04-01 12:58:40
【问题描述】:
我正在尝试从纪元时间戳以来的秒数计算星期几。从time.h我可以使用gmtime(),但这增加了1.3kB的程序,可能是因为gmtime()也计算了日期。
所以,我想知道使用类似的东西会有什么问题:
(timestamp / (24*3600)) % 7
我唯一能想到的是闰秒,这样像 00:00:02 这样的日期可能会被归类为错误的日期。
编辑 这是用于嵌入式编程的,1.3kB 是 64kB 程序/固件的重要组成部分。此外,我不希望在此之后对时区或日期做任何事情。
【问题讨论】:
-
您的代码不支持时区。
-
对于一个微不足道的程序,或多或少 1.3kB 并不重要,因为这是一个微不足道的一次性示例。对于一个不平凡的程序,或多或少 1.3kB 也并不重要,因为无论如何都会有许多其他类似大(甚至更大)的块链接。我认为您应该选择
gmtime()。避免使用本地代码的标准函数只会给您带来可以避免的问题。 -
经过一番思考,闰秒并不是真正的问题,因为 UNIX 时间不考虑闰秒。我在上面编辑了我的评论以反映这一点。
-
关于“自纪元以来的秒数”,请注意,这是一个常见的误解,即这是您从
time()得到的。实际上,time()返回 (time_t) 的编码是“实现定义的”。您可以从timespec_get()获得“自纪元以来的秒数”,而“纪元”又是实现定义的。小心这种假设。 ;-) -
感谢您的回答,我稍微编辑了问题以更好地定义问题。从来不知道 unix 时间不包括闰秒。