timeIntervalSince1970转换返回错误的年份在Swift 3
我正面临一个问题,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年没有人有相同的情况下返回多余?
问题是日期格式使用“Year(of”Year of“Year”)“(YYYY
),但您期望的结果是”日历年“(yyyy
)。
将日期格式更改为"MM/dd/yyyy"
后,我看到了您期待的结果(2018年和2100年)。
你可以看到这两个Y
和y
在Unicode Standard Date Field Symbol Table上市。在他们的例子中,“年度周”(1997年)也比日历年(1996年)多一年。
的Data Formatting Guide也带来了同样的问题,并指出应该通常使用日历日期(yyyy
):
一个常见的错误是使用
YYYY
。yyyy
指定日历年,而YYYY
指定在ISO年周历中使用的年份(“年份周”)。在大多数情况下,yyyy
和YYYY
产生相同的数字,但它们可能不同。通常你应该使用日历年。
您使用YYYY而不是yyyy。 查看此页面了解详情。 ^^
谢谢你的回答!我没有注意到YYYY和YYYY是不同的 –
谢谢你这么多,细节:) 你解决我的问题 –