0

游乐场代码:

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)

在我使用在线服务的同时-它表明我选择的格式是正确的。我的错误在哪里?

4

2 回答 2

1

使用时的小提示DateFormatter,如果它不能以一种方式工作,那么请以另一种方式进行:

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

这样你就会看到你的格式是如何被真正解释的。

如果你这样做,你会得到:

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

看到 extras,Aug 03vs03 Aug吗?

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

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

你只需要给它你想要的信息(日、年、月等),它就会dateFormat在本地化版本中创建正确的对应信息(然后添加额外的标点符号等)。

所以改用:

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

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

于 2018-08-03T10:12:57.820 回答
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)
于 2018-08-03T09:27:05.010 回答