2016-12-03 71 views
1

自24的小时数有86400000毫秒,则是安全调用:使用模运算符(%)和unix时期时间戳安全吗?

timestamp % 86400000

期间某一天获得通过毫秒? timestamp是以毫秒表示的unix时期,例如1480771537000

我想知道这是否是一种安全的技术,因为闰秒正被添加和减少时不时?上面的代码总是会在一天中正确返回毫秒,而不管timestamp是什么?

+0

@RyanVincent我使用的是由Android产生的Unix时间戳返回毫秒 - 感谢指出,通过本书Unix纪元以秒为单位。尽管如此,这并不重要,考虑与秒问相同的问题。我的用例从白天显示剩余时间到午夜执行操作有所不同 – Voy

+0

@RyanVincent是的,当我检测到从一天到另一天的变化时,我试图实现的一件事是运行一些逻辑。除此之外,我确实需要知道白天已经过去的时间,以显示一天中剩余的时间。请注意,我正在使用NTP时间戳,而不是机器时钟 – Voy

+0

@RyanVincent我目前正在用Java编写。感谢您的建议,但这些细节又是无关紧要的,因为这个问题并没有要求特别的实施和我的使用案例。它涉及到unix时代理论和对unix时间戳执行模运算的稳健性,考虑闰秒 – Voy

回答

1

是的,你可以使用timestamp % 86400000告诉时间戳是否代表当天午夜/开始(假设时间戳是毫秒因为时代,而不是秒)。

根据this Stack Overflow answer就Unix时间而言,总有86400000毫秒的时间,尽管实际上我们有时会添加leap seconds,因此有些日子会延长一秒。

0

世纪时间是格林尼治标准时间。你需要一个包含你的时区的时间戳。我正在使用的代码下面这个:

time_t t = time(NULL); 

t = timegm(localtime(&t)); 

if(t % 86400 == 0) { 

} 
+0

通过缩进4个空格来格式化您的代码。 – Bugs

+0

嘿谢谢参与,但我不认为这真的回答了这个问题。尽管如此,你的实现似乎缺乏解释和格式 – Voy