【发布时间】:2014-11-10 09:29:35
【问题描述】:
在解析日期时遇到一些问题。我有一系列支持的格式,一旦我从 API 接收到日期(字符串),我会尝试通过格式迭代解析它,直到我得到一个有效的 NSDate 对象。
来自 Xcode Playground 的 sn-p --
let dateString = "02/06/1987" // --> want to parse into this Feb 6, not Jun 2
let dateFormatIncorrect = "dd.MM.yyyy"
let dateFormatCorrect = "MM/dd/yyyy"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = dateFormatIncorrect
let date = dateFormatter.dateFromString(dateString)! // "Jun 2, 1987, 12:00 AM"
dateFormatter.dateFormat = dateFormatCorrect
let date2 = dateFormatter.dateFromString(dateString)! // "Feb 6, 1987, 12:00 AM"
为什么即使给定字符串的格式明显不正确,它也会解析日期?在文档中找不到关于忽略分隔符的日期格式化程序的任何内容。
我意识到正确的解决方案是从 API 返回固定格式,但想知道这里发生了什么?
谢谢。
【问题讨论】:
-
@TheParamagneticCroissant 它没有翻转日/月。这两个格式化程序以不同的顺序指定它们。 dMy 和 Mdy。
-
MM 代表月份,dd 代表月份中的某天。所以 dd.MM.yyyy 是正确的格式
-
@Fogmeister 哦,是的,没错。
-
月份和日期的位置是故意不同的。我很好奇为什么即使分隔符不匹配(/ 和 .)
-
这很有趣。即使使用
dateFormatIncorrect = "'aaa'dd'bbb'MM'ccc'yyyy'ddd'",日期格式化程序也会对其进行转换。
标签: ios swift nsdateformatter