这是我要转换的字符串日期
2019-03-22T00:00:00
请记住,我使用了“ yyyy-MM-dd'T'HH:mm:ss”或“ yyyy-MM-ddTHH:mm:ss”或“ yyyy-MM-dd HH:mm:ss”或yyyy-MM-dd'T'HH:mm:ssZ和其他一些类似的格式
答案 0 :(得分:4)
解析互联网日期时必须设置时区和语言环境:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
// necessary to avoid daylight saving (and other time shift) problems
dateFormatter.timeZone = TimeZone(secondsFromGMT: TimeZone.current.secondsFromGMT())
// necessary to avoid problems with 12h vs 24h time formatting
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
print(dateFormatter.date(from: "2019-03-22T00:00:00"))
默认时区包含有关夏时制的信息,并且那里不存在某些特定时间。相反,我们必须使用通用时区。
请参见https://developer.apple.com/library/archive/qa/qa1480/_index.html
2019年3月22日午夜前后是伊朗的夏时制更改不存在一个小时的日期和时间。
使用ISO8601DateFormatter可以实现相同的目的:
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = ISO8601DateFormatter.Options.withInternetDateTime.subtracting(.withTimeZone)
print(dateFormatter.date(from: "2019-03-22T00:00:00"))
答案 1 :(得分:1)
尝试此功能可能会帮助
public func dateFormatter(strDate: String) -> String{
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "fa_IR")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let date = dateFormatter.date(from: strDate)
let dateString = dateFormatter.string(from: date!)
return dateString
}
答案 2 :(得分:0)
dateFormatter.isLenient = true
忽略夏令时偏移量中的小时数