如何在Swift中解析带有缩写时区的日期字符串

如何在Swift中解析带有缩写时区的日期字符串,swift,datetime,nsdateformatter,dateformatter,Swift,Datetime,Nsdateformatter,Dateformatter,我正在使用Swift 3并使用YQL端点的日期字符串,格式为2017年3月4日星期六格林威治标准时间凌晨03:40。这在一些时区(GMT、EST…)下运行良好,但在使用例如JST或CET时,它无法解析——显然是因为这些是缩写的时区名称 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm a Z" var origin = dateFormatter.date(from: "S

我正在使用Swift 3并使用YQL端点的日期字符串,格式为2017年3月4日星期六格林威治标准时间凌晨03:40。这在一些时区(GMT、EST…)下运行良好,但在使用例如JST或CET时,它无法解析——显然是因为这些是缩写的时区名称

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm a Z"
var origin = dateFormatter.date(from: "Sat, 04 Mar 2017 03:40 AM JST") // nil
origin = dateFormatter.date(from: "Sat, 04 Mar 2017 03:40 AM GMT") // works!
一个简单的解决方案是访问日期组件并使用
components.timezone=timezone(缩写:“JST”)
分配时区,然后创建一个新的日期对象,但这只会让整个事情变得太难看。我还尝试使用
dateFormatter.locale=locale(标识符:“en_US_POSIX”)
设置区域设置,但没有任何区别,时区标识符设置为
zzz
zzz
以及所有可能的变体。
是否有什么东西我忽略了或不能理解字符串中的缩写时区