如何将稍有格式的RFC822字符串转换为日期?

问题描述 投票:0回答:1

我的来源之一包含这样的日期字符串:

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将此示例字符串转换为有效日期?

swift nsdateformatter date-formatting dateformatter
1个回答
1
投票

问题是在时区部分缺少前导零,没有相应的符号。

一种可能的解决方案是使用正则表达式插入丢失的零

let str = "Fri, 22 May 2020 22:49:06+5:30"
let adjustedString = str.replacingOccurrences(of: "([+-])(\\d:\\d{2})", with: "$10$2", 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)
© www.soinside.com 2019 - 2024. All rights reserved.