Swift:NSDateFormatter在设备上返回nil

7

我在Obj-c中找到了解决我的问题的方法,但是我无法翻译这段代码,所以我想寻求一个Swift的解决方案。

我正在解析一个JSON文件中的一些数据,但在检索日期时遇到了问题;以下是代码:

println(data) // "Fri, 16 Jan 2015 11:49:00 +0100"

var dateFormatter           = NSDateFormatter()
dateFormatter.dateFormat    = "EEE, dd LLL yyyy HH:mm:ss ZZZ"
let formattedDate           = dateFormatter.dateFromString(data)

println(formattedDate) // returns 'Optional(2015-01-16 11:49:00 +0100)' if running on an iOs Simulator
                       // returns 'nil' if runnig on an iPhone

如我在代码注释中所写的那样,如果我在iOS模拟器或播放器上运行它,就可以正确地获取日期的可选类型,但是如果在iPhone上运行,则会得到nil。

有人能帮忙吗?


给你的 dateFormatter 添加一个时区/语言环境,怎么样? - Larme
添加 dateFormatter.timeZone = NSTimeZone(abbreviation: "GMT") 不会改变结果。 - Stizz
@Stizz:检查一下 dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z" - Midhun MP
@MidhunMP:你的建议并没有改变什么 :/ - Stizz
4
尝试使用dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX"),并查看此链接:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW7 - rintaro
@rintaro:谢谢!现在它运行得很好! - Stizz
1个回答

7

对于那些没有阅读初始帖子评论的人 ;)

正如@ rintaro指出的 - 也是我的问题 - 当您使用固定格式日期时,您必须添加区域设置

如果您正在使用固定格式日期,则应首先将日期格式化程序的区域设置设置为适合固定格式的某些内容。在大多数情况下,最好选择的区域设置是en_US_POSIX

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW7

所以在Swift 3中,您需要添加以下代码:

dateFormatter.locale = Locale(identifier: "en_US_POSIX")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接