关于日期输入"00/02/02"
形成方式为yy/MM/dd
我得到了正确的输出,如02/01/2000
但问题是,当"00/01/01“得到像'01/01/12100‘这样的输出时
但我不知道为什么今年会像12100那样
我的代码是
let str = "00/01/01"
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yy/MM/dd"
if let showDate = inputFormatter.date(from: str) {
inputFormatter.dateFormat = "dd/MM/yyyy"
let resultString = inputFormatter.string(from: showDate)
print(resultString)
}年份输入类型始终为yy格式。
发布于 2018-10-08 12:28:49
根据@MartinR建议,settinginputFormatter.defaultDate到当前日期或日期(timeIntervalSinceReferenceDate: 0),其工作正常
let str = "00/01/01"
let inputFormatter = DateFormatter()
inputFormatter.defaultDate = Date(timeIntervalSinceReferenceDate: 0)
inputFormatter.dateFormat = "yy/MM/dd"
if let showDate = inputFormatter.date(from: str) {
inputFormatter.dateFormat = "dd/MM/yyyy"
let resultString = inputFormatter.string(from: showDate)
print(resultString)
}发布于 2018-10-08 16:43:05
在从格式化程序获取日期之前,我设法将格式化程序的时区设置为本地时区,从而复制了此bug:
inputFormatter.timeZone = TimeZone(identifier: "Asia/Kolkata")
//Or
inputFormatter.timeZone = TimeZone(identifier: "Asia/Calcutta") 它们都会导致01/01/12100。
实际上,使用yy/MM/dd hh:mm:ss的日期格式,从00/01/01 00:00:00到00/01/01 05:29:59的所有日期都会给出12100的一个年份组件。这是因为加尔各答的时区正被格林尼治时间的+05H30抵消。这是个窃听器。
将时区设置为UTC将产生所需的输出:
inputFormatter.timeZone = TimeZone(identifier: "UTC") //01/01/2000此错误也发生在其他时区:
inputFormatter.timeZone = TimeZone(identifier: "Africa/Addis_Ababa")
inputFormatter.timeZone = TimeZone(identifier: "Europe/Moscow")
inputFormatter.timeZone = TimeZone(identifier: "Asia/Hong_Kong")基本上所有具有GMT + hh:mm的时区
https://stackoverflow.com/questions/52701626
复制相似问题