我正在使用 Swift 3 并使用格式为 YQL 端点的日期字符串Sat, 04 Mar 2017 03:40 AM GMT
。这适用于一些时区(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(abbreviation: "JST")
并创建一个新的日期对象,但这只会让整个事情变得太丑陋。我还尝试设置语言环境,dateFormatter.locale = Locale(identifier: "en_US_POSIX")
但这没有任何区别,时区标识符为zzz
orZZZ
和所有可能的变体。
是否有什么我忽略或无法快速理解字符串中的缩写时区?