我遇到了timeIntervalSince1970
错误年份的问题。
这是我的代码
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
根据{{3}} ,他们都返回一年
1546214400.0 = 12/31/2018
4133894400.0 = 12/31/2100
有没有人有相同的情况?
答案 0 :(得分:1)
问题是日期格式使用“年(”年“周”)(YYYY
),但您期望的结果是“日历年”(yyyy
)。
将日期格式更改为"MM/dd/yyyy"
后,我看到了您期望的结果(2018年和2100年)。
您可以在Unicode Standard Date Field Symbol Table中看到Y
和y
。在他们的例子中,“年度周”(1997年)也比日历年(1996年)多一个。
Data Formatting Guide也会出现同样的问题,并指出通常应使用日历日期(yyyy
):
常见的错误是使用
YYYY
。yyyy
指定日历年,而YYYY
指定ISO年度日历中使用的年份(“年度周”)。在大多数情况下,yyyy
和YYYY
会产生相同的数字,但它们可能会有所不同。通常,您应该使用日历年。
答案 1 :(得分:0)