2017-10-06 125 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

谢谢你这么多,细节:) 你解决我的问题 –