swift - Swift“字符串中的日期”转换不起作用,但格式适用于在线服务?
问题描述
游乐场代码:
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)
在我使用在线服务的同时-它表明我选择的格式是正确的。我的错误在哪里?
解决方案
使用时的小提示DateFormatter
,如果它不能以一种方式工作,那么请以另一种方式进行:
let string = dateFormatter.string(from: Date())
print("string: \(string)")
这样你就会看到你的格式是如何被真正解释的。
如果你这样做,你会得到:
$> string: Fri, Aug 03, 2018, 12:05:09 GMT
看到 extras,
和Aug 03
vs03 Aug
吗?
现在,您的问题是您误解了localizedDateFormatFromTemplate
.
事实上,您可以删除空格、标点符号和顺序。例如,dateFormatter.setLocalizedDateFormatFromTemplate("ddyyyyHHmmsszEMMM")
给出相同的输出。
你只需要给它你想要的信息(日、年、月等),它就会dateFormat
在本地化版本中创建正确的对应信息(然后添加额外的标点符号等)。
所以改用:
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
旁注:我目前住在 GMT+2,所以我添加dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
以使其正常工作。
推荐阅读
- scrapy - Splash 返回多个 html 快照的问题
- c# - 如何检查数值是否为零
- c - 如何从 .txt 文件中读取已知数量的未知大小的字符串并将每一行存储在矩阵的一行中(在 C 中)?
- c# - 旋转时控制混乱
- python - Pandas Dataframe 用 stack 和 unstack 重塑
- php - laravel 部分破坏了 flowe 的其余部分
- javascript - AngularJS:ng-repeat 检测组更改
- java - 从 Vert.x 调用多个呼出电话
- java - 用于测试 RabbitMQ 消费者和生产者的 JUnit 测试
- html - 边距正在移动父容器和子 div 而不仅仅是子 div