将包含日期的字符串转换为日期
Convert string containing date to Date
我在将字符串转换为 swift 日期时遇到问题,也许这是显而易见的事情,但我不明白。
我正在尝试将 "Jan 18, 2022 04:39PM GMT" 这个字符串转换成日期。我的代码如下所示:
let str = "Jan 18, 2022 04:39PM GMT"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, YYYY hh:mma z"
let date = dateFormatter.date(from: str)
print(date)
控制台显示:Optional(2021-12-19 16:39:00 +0000)
知道这个格式化程序有什么问题吗?
除了显示为可选的日期外,您的格式字符串似乎有误。 “YYYY”应该是“yyyy”,所以分配格式化程序的整行应该是:
dateFormatter.dateFormat = "MMM d, yyyy hh:mma z"
该更改产生输出
“可选(2022-01-18 16:39:00 +0000)”
此外,你真的应该强制日历为公历或 iso8601,并将其语言环境设置为 "en_US_POSIX
:
日期格式化程序的改进版本可能如下所示:
(来自 Leo 的编辑。)
let str = "Jan 18, 2022 04:39PM GMT"
let dateFormatter = DateFormatter()
dateFormatter.calendar = .init(identifier: .iso8601)
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "MMM d, yyyy hh:mma z"
if let date = dateFormatter.date(from: str) {
let dateString = dateFormatter.string(from: date)
print(dateString == str) // true
}
转换日期写的代码是正确的,转换后的日期也是正确的。但最终结果是可选的,因此您得到的日期类似于 Optional(2021-12-19 16:39:00 +0000)。
日期格式化程序也是错误的。
所以请打开日期以获取没有可选的实际日期。
dateFormatter.dateFormat = "MMM d, yyyy hh:mma z"
guard let convertedDate = date else {
return
}
print(convertedDate)
我在将字符串转换为 swift 日期时遇到问题,也许这是显而易见的事情,但我不明白。
我正在尝试将 "Jan 18, 2022 04:39PM GMT" 这个字符串转换成日期。我的代码如下所示:
let str = "Jan 18, 2022 04:39PM GMT"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, YYYY hh:mma z"
let date = dateFormatter.date(from: str)
print(date)
控制台显示:Optional(2021-12-19 16:39:00 +0000)
知道这个格式化程序有什么问题吗?
除了显示为可选的日期外,您的格式字符串似乎有误。 “YYYY”应该是“yyyy”,所以分配格式化程序的整行应该是:
dateFormatter.dateFormat = "MMM d, yyyy hh:mma z"
该更改产生输出
“可选(2022-01-18 16:39:00 +0000)”
此外,你真的应该强制日历为公历或 iso8601,并将其语言环境设置为 "en_US_POSIX
:
日期格式化程序的改进版本可能如下所示:
(来自 Leo 的编辑。)
let str = "Jan 18, 2022 04:39PM GMT"
let dateFormatter = DateFormatter()
dateFormatter.calendar = .init(identifier: .iso8601)
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "MMM d, yyyy hh:mma z"
if let date = dateFormatter.date(from: str) {
let dateString = dateFormatter.string(from: date)
print(dateString == str) // true
}
转换日期写的代码是正确的,转换后的日期也是正确的。但最终结果是可选的,因此您得到的日期类似于 Optional(2021-12-19 16:39:00 +0000)。 日期格式化程序也是错误的。 所以请打开日期以获取没有可选的实际日期。
dateFormatter.dateFormat = "MMM d, yyyy hh:mma z"
guard let convertedDate = date else {
return
}
print(convertedDate)