Swift "date from string" 转换无效但格式适用于在线服务?
Swift "date from string" conversion doesn't work but the format works with online service?
游乐场代码:
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——这说明我选择的格式是正确的。我的错误在哪里?
您必须输入 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)
使用 DateFormatter
时的小提示,如果一种方法不起作用,则另一种方法:
let string = dateFormatter.string(from: Date())
print("string: \(string)")
这样您将看到您的格式是如何被真正解释的。
如果这样做,您将获得:
$> string: Fri, Aug 03, 2018, 12:05:09 GMT
查看额外内容 ,
和 Aug 03
对比 03 Aug
?
现在,你的问题是你误解了localizedDateFormatFromTemplate
。
事实上,您可以删除空格、标点符号和顺序。
例如,dateFormatter.setLocalizedDateFormatFromTemplate("ddyyyyHHmmsszEMMM")
给出相同的输出。
你只需要给它你想要的信息类型(日、年、月等),它就会创建与本地化版本相对应的正确 dateFormat
(然后添加额外的标点符号等) .).
所以改用:
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
旁注:
我目前住在 GMT+2,所以我添加了 dateFormatter.timeZone = TimeZone(secondsFromGMT: 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)
同时我使用了online service——这说明我选择的格式是正确的。我的错误在哪里?
您必须输入 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)
使用 DateFormatter
时的小提示,如果一种方法不起作用,则另一种方法:
let string = dateFormatter.string(from: Date())
print("string: \(string)")
这样您将看到您的格式是如何被真正解释的。
如果这样做,您将获得:
$> string: Fri, Aug 03, 2018, 12:05:09 GMT
查看额外内容 ,
和 Aug 03
对比 03 Aug
?
现在,你的问题是你误解了localizedDateFormatFromTemplate
。
事实上,您可以删除空格、标点符号和顺序。
例如,dateFormatter.setLocalizedDateFormatFromTemplate("ddyyyyHHmmsszEMMM")
给出相同的输出。
你只需要给它你想要的信息类型(日、年、月等),它就会创建与本地化版本相对应的正确 dateFormat
(然后添加额外的标点符号等) .).
所以改用:
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
旁注:
我目前住在 GMT+2,所以我添加了 dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
以使其正常工作。