快速的“从字符串开始日期”转换不起作用,但该格式可用于在线服务吗?

时间:2018-08-03 09:16:44

标签: swift string date nsdateformatter dateformatter

游乐场代码:

var dateStr = "Fri, 03 Aug 2018 08:55:22 GMT"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.setLocalizedDateFormatFromTemplate("EEE, dd MMM yyyy HH:mm:ss z")
let date = dateFormatter.date(from: dateStr)

同时使用online service-它表明我选择的格式正确。我的错误在哪里?

2 个答案:

答案 0 :(得分:1)

使用DateFormatter时的小提示,如果它不能以一种方式起作用,请以另一种方式来解决该问题:

let string = dateFormatter.string(from: Date())
print("string: \(string)")

这样,您将看到格式的真正解释。

如果这样做,您将获得:

$> string: Fri, Aug 03, 2018, 12:05:09 GMT

看到额外功能,Aug 0303 Aug吗?

现在,您的问题是您误解了localizedDateFormatFromTemplate

实际上,您可以删除空格,标点符号和顺序。 例如,dateFormatter.setLocalizedDateFormatFromTemplate("ddyyyyHHmmsszEMMM")给出相同的输出。

您只需要向其提供所需的信息类型(天,年,月等),然后它会在本地化版本中创建正确的dateFormat(添加其他标点符号等)。

因此改用:

dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"

旁注: 我目前居住在GMT + 2上,因此添加了dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)以使其正常工作。

答案 1 :(得分:0)

您必须输入dateFormatter.dateFormat才能将字符串转换为日期格式。从评论中您可以获得答案,但是对于其他人,我在这里发布了正确答案。

var dateStr = "Fri, 03 Aug 2018 08:55:22 GMT"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z" //Added this line.
let date = dateFormatter.date(from: dateStr)