2012 年 6 月 30 日有閏秒。因此,它持續了 86401 秒。但是,在下面的 Swift 代碼中,timeInterval是 86400。這是怎么回事???
let formatter = ISO8601DateFormatter()
let date = formatter.date(from: "2012-06-30T00:00:00Z")!
let dayAfter = formatter.date(from: "2012-07-01T00:00:00Z")!
let timeInterval = date.distance(to: dayAfter)
(ps:我在什么情況下寫了這段代碼?只是為了玩代碼。我試圖寫出令人困惑的代碼結果,但我對這種試圖變得聰明的嘗試感到失望)
uj5u.com熱心網友回復:
Apple 日期和時間 API 和系統實作的基礎是ICU 庫,您看到的大多數結果的基礎取決于 ICU 行為。值得注意的是,ICU 不支持也不考慮閏秒的存在:
由于歷史原因,參考點是英國格林威治。格林威治的當地時間稱為格林威治標準時間,或 GMT。(這與通用協調時間或 UTC 相似,但并不完全相同。我們在 ICU 中互換使用這兩個術語,因為 ICU 本身不關心閏秒或歷史行為。)
因此,Apple 平臺也不以任何方式在 API 中代表歷史(或未來)閏秒;系統通過NTP有效地處理閏秒,并且只需適當地設定它們的時鐘,但是像這樣查詢閏秒不會產生任何結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/435782.html
