2017-10-06 144 views
1

我正面臨一個問題,timeIntervalSince1970返回錯誤的一年。timeIntervalSince1970轉換返回錯誤的年份在Swift 3

這裏是我的代碼

func unixToDateString(timeStamp: TimeInterval) -> String { 
    let date = Date(timeIntervalSince1970: timeStamp) 
    let dateFormatter = DateFormatter() 
    dateFormatter.locale = Locale(identifier:Locale.current.identifier) 
    dateFormatter.dateFormat = "MM/dd/YYYY" 
    return dateFormatter.string(from: date) 
} 

,這些都是我的結果

unixToDateString(timeStamp: 1505896961.0) 

回報

09/20/2017 

這是正確的

但是,

unixToDateString(timeStamp: 1546214400.0) 
unixToDateString(timeStamp: 4133894400.0) 

回報

12/31/2019 
12/31/2101 

他們都根據Epoch Unix Time Stamp Converter

1546214400.0 = 12/31/2018 
4133894400.0 = 12/31/2100 

1年沒有人有相同的情況下返回多餘?

回答

1

問題是日期格式使用「Year(of」Year of「Year」)「(YYYY),但您期望的結果是」日曆年「(yyyy)。

將日期格式更改爲"MM/dd/yyyy"後,我看到了您期待的結果(2018年和2100年)。


你可以看到這兩個YyUnicode Standard Date Field Symbol Table上市。在他們的例子中,「年度周」(1997年)也比日曆年(1996年)多一年。

Data Formatting Guide也帶來了同樣的問題,並指出應該通常使用日曆日期(yyyy):

一個常見的錯誤是使用YYYYyyyy指定日曆年,而YYYY指定在ISO年周曆中使用的年份(「年份周」)。在大多數情況下,yyyyYYYY產生相同的數字,但它們可能不同。通常你應該使用日曆年。

+0

謝謝你這麼多,細節:) 你解決我的問題 –