我无法将 iso8601 转换为字符串 swift
I can't convert iso8601 to string swift
我有一个来自 API 的字符串,它的格式是这样的
"2021-03-01T15:00:00+07:00"
所以我尝试使用此代码将此字符串转换为日期
// string to date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let date = dateFormatter.date(from: isoDate)!
print("date from date Formatter = \(date)")
// convert date back to string
dateFormatter.dateFormat = "EEEE HH:mm"
let dateString = dateFormatter.string(from: date)
print("date string \(dateString)")
return dateString
我期望的结果是 -> "2021-03-01 08:00:00 +0000"
, "Monday 15:00"
当我在操场上尝试这个时,结果是我想要的,但是当我在我的项目中尝试这个时,结果是
-> "1478-03-01 08:00:00 +0000"
, "Sunday 14:42"
如何将结果更改为与我期望的相同?谢谢
看起来您使用的日历与您在项目中预期的不同(buddhist 可能?)我想这是因为您没有明确设置日历,所以它是在系统偏好设置中设置的.
因此,如果您出于某种原因不想使用用户当前的日历(以及区域设置和时区),您需要在日期格式化程序实例上设置这些属性
//Gregorian calendar
dateFormatter.calendar = Calendar.init(identifier: .gregorian)
//UTC time zone
dateFormatter.timeZone = TimeZone(identifier: "UTC")
//English locale
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
这将为您提供预期的输出。
请注意,playground 在使用方面有点不合时宜,它似乎是我们在系统首选项中设置的内容和硬编码值的混合体。
我有一个来自 API 的字符串,它的格式是这样的
"2021-03-01T15:00:00+07:00"
所以我尝试使用此代码将此字符串转换为日期
// string to date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let date = dateFormatter.date(from: isoDate)!
print("date from date Formatter = \(date)")
// convert date back to string
dateFormatter.dateFormat = "EEEE HH:mm"
let dateString = dateFormatter.string(from: date)
print("date string \(dateString)")
return dateString
我期望的结果是 -> "2021-03-01 08:00:00 +0000"
, "Monday 15:00"
当我在操场上尝试这个时,结果是我想要的,但是当我在我的项目中尝试这个时,结果是
-> "1478-03-01 08:00:00 +0000"
, "Sunday 14:42"
如何将结果更改为与我期望的相同?谢谢
看起来您使用的日历与您在项目中预期的不同(buddhist 可能?)我想这是因为您没有明确设置日历,所以它是在系统偏好设置中设置的.
因此,如果您出于某种原因不想使用用户当前的日历(以及区域设置和时区),您需要在日期格式化程序实例上设置这些属性
//Gregorian calendar
dateFormatter.calendar = Calendar.init(identifier: .gregorian)
//UTC time zone
dateFormatter.timeZone = TimeZone(identifier: "UTC")
//English locale
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
这将为您提供预期的输出。
请注意,playground 在使用方面有点不合时宜,它似乎是我们在系统首选项中设置的内容和硬编码值的混合体。