如果我将“ 2019-01-01T00:00:00 + 0000”转换为日期,则希望该日期为字符串中的日期-2019年1月1日。如果我计算秒数在时间部分,我希望结果为零。
问题是,当我将字符串转换为日期时,它存储在UTC时区中。我的语言环境设置为“ en_US_POSIX”,我的时区设置为当前。我的日期格式化程序使用“ yyyy-MM-dd'T'HH:mm:ssZ”。我知道最后的Z表示UTC,但我似乎无法找出正确的字段符号来获得所需的结果。
func convertToDate(_ dateString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = .current
let date = dateFormatter.date(from: dateString)
else {
print("DATE ERROR:", dateString)
return Date()
}
return date
}
答案 0 :(得分:3)
如果您确定要解析的日期字符串始终以+XXXX
格式的时区结尾,则可以从字符串中剪裁该时区,然后将其余的字符串解析为本地时间。
func convertToDate(_ dateString: String) -> Date? {
let minusTZ = String(dateString.dropLast(5)) // Assume the string ends with a +9999 timezone
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from: minusTZ)
return date
}
这将为您提供一个与原始字符串中的日期和时间相同的本地日期,而不管原始字符串的时区如何。