如何将格式稍有错误的 RFC822 字符串转换为日期?
How to convert a slightly misformed RFC822 string to a date?
我的一个来源包含这样的日期字符串:
Fri, 22 May 2020 22:49:06+5:30
这看起来像 RFC 822 date,除了最后的时区部分。
我尝试使用如下代码将此字符串转换为日期:
let str = "Fri, 22 May 2020 22:49:06+5:30"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ssZ"
let date = formatter.date(from: str)
我尝试了各种 dateFormat
字符串,但最后一行一直返回 nil。
有什么方法可以使用 DateFormatter
将此示例字符串转换为有效日期吗?
问题是时区部分缺少前导零,没有对应的符号。
一个可能的解决方案是用正则表达式插入缺失的零
let str = "Fri, 22 May 2020 22:49:06+5:30"
let adjustedString = str.replacingOccurrences(of: "([+-])(\d:\d{2})", with: "", options: .regularExpression)
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ssZ"
let date = formatter.date(from: adjustedString)
我的一个来源包含这样的日期字符串:
Fri, 22 May 2020 22:49:06+5:30
这看起来像 RFC 822 date,除了最后的时区部分。
我尝试使用如下代码将此字符串转换为日期:
let str = "Fri, 22 May 2020 22:49:06+5:30"
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ssZ"
let date = formatter.date(from: str)
我尝试了各种 dateFormat
字符串,但最后一行一直返回 nil。
有什么方法可以使用 DateFormatter
将此示例字符串转换为有效日期吗?
问题是时区部分缺少前导零,没有对应的符号。
一个可能的解决方案是用正则表达式插入缺失的零
let str = "Fri, 22 May 2020 22:49:06+5:30"
let adjustedString = str.replacingOccurrences(of: "([+-])(\d:\d{2})", with: "", options: .regularExpression)
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ssZ"
let date = formatter.date(from: adjustedString)