Swift "date from string"转换不起作用但格式适用于在线服务?

标签 swift string date nsdateformatter dateformatter

Playground 代码:

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 时的小提示,如果它不能以一种方式工作,则以另一种方式进行:

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

这样您将看到您的格式是如何被真正解释的。

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

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

看到额外的 Aug 03 vs 03 Aug

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

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

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

所以改用:

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

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

关于Swift "date from string"转换不起作用但格式适用于在线服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669276/

相关文章:

C - 我不想分配我不会使用的内存! (新问题)

python - 在 Python 中确定两个日期之间的秒数

ios - 如何让 UIScrollView 滚动

string - 查找字符串中最长的非回文子串

ios - 字典(键,值)顺序

java - 使用自定义比较器在 Java 中创建 SortedMap

javascript - 如何在javascript中获取特定日期的日期?

javascript - Javascript date toLocaleString 是否考虑 DST?

ios - 透明导航栏(swift 3)

ios - 如何截取单个 View 对象而不是整个屏幕的屏幕截图?