在使用 Unix 纪元时间戳时,使用模运算符(%)是否安全?

4

由于24小时有86400000毫秒,因此调用以下代码是安全的:

timestamp % 86400000

以获取某一天经过的毫秒数?timestamp是以毫秒为单位表示的Unix纪元,例如1480771537000

我想知道这是否是一种安全的技术,考虑到闰秒会不时添加和减去?无论timestamp是什么,上述代码是否始终正确返回当天的毫秒数?


@RyanVincent 我正在使用由Android生成的Unix时间戳,它返回毫秒-感谢您指出按照书上的说法,Unix纪元以秒为单位表示。尽管如此,这并不重要,请考虑在秒钟方面提出同样的问题。我的用例因显示一天内剩余的时间而异,直到午夜执行操作。 - Voy
@RyanVincent 是的,我试图实现的其中一件事情是在检测到从一天到另一天的变化时运行一些逻辑。除此之外,我确实需要知道一天中已经过去的时间,以显示剩余时间。请注意,我是使用NTP时间戳而不是机器时钟来完成这个任务的。 - Voy
@RyanVincent 我目前正在用Java编写。感谢您的建议,但同样这些细节并不相关,因为问题既不要求特定实现,也不要求我的使用情况。这与Unix纪元理论以及在考虑闰秒的情况下执行模操作的鲁棒性有关。 - Voy
2个回答

2

是的,你可以使用timestamp % 86400000来判断时间戳是否表示午夜/一天的开始(假设时间戳是自纪元以来的毫秒,而不是秒)。

根据这个Stack Overflow答案,在Unix时间中,一天总是包含86400000毫秒,尽管在现实生活中我们有时会添加闰秒,使得某些日子比标准的一天多一秒。


-1

Epoch时间是GMT时间。您需要一个包含您的时区的时间戳。我使用以下代码来实现:

time_t t = time(NULL);

t = timegm(localtime(&t));

if(t %  86400 == 0) {

}

嘿,感谢您的参与,尽管我认为这并没有真正回答问题。不过,您的实现似乎缺乏解释和格式化。 - Voy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接