2016-12-03 39 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