无法解析日期

我从Web服务返回以下格式的日期时间字符串:

2014-08-22T15:00:00-04:00

最初,我手动剥离了碎片并将其重建为NSDate变量。 我遇到的问题是当我检索日期的那一天时,00到04的小时会给我前一天。 即使将本地时区应用于日期格式化程序,新日期的打印值也以+0000结束,这可能不对。

无论如何,我随后在Ojbective-C的苹果网站上找到了一些代码并将其翻译成Swift:

func userVisibleDateTimeStringForRFC3339DateTimeString(rfc3339DateTimeString: String) -> NSDate { let rfc3339DateFormatter = NSDateFormatter() let enUSPOSIXLocale = NSLocale(localeIdentifier: "en_US_POSIX") rfc3339DateFormatter.locale = enUSPOSIXLocale rfc3339DateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'" let date = rfc3339DateFormatter.dateFromString(rfc3339DateTimeString) return date! } 

(原始代码生成了“用户可读日期字符串。”我只需要日期。

现在,它在return语句中崩溃,因为date是nil,这意味着它没有解析该datetime字符串。

我甚至尝试过:

 let format="yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'" var dateFmt = NSDateFormatter() dateFmt.dateFormat = format println(noaaDate) let newreadableDate = dateFmt.dateFromString(noaaDate) println(newreadableDate) 

newreadableDate是零

我需要的只是将该字符串转换为一个日期,让我稍后进行适当的日期组件比较。

不要转义格式化字符,’Z’不能转义,它是格式化语法字符。 只有’T’必须被转义,因为它是一个语法字符,不应该被解释为一个。 ‘ – ‘和’=’不是语法字符,因此它们不需要转义,但可以。

从文档:“从a到z和从A到Z的ASCII字母保留为语法字符”。
因此,任何字符a-zA-Z都被视为语法字符,除非它们被转义。

让格式=“yyyy-MM-dd’T’HH:mm:ssZ”

请参阅: ICU格式化日期和时间

 let noaaDate = "2014-08-22T15:00:00-04:00" let format="yyyy-MM-dd'T'HH:mm:ssZ" var dateFmt = NSDateFormatter() dateFmt.dateFormat = format let newreadableDate = dateFmt.dateFromString(noaaDate) println(newreadableDate) 

输出:

可选(2014-08-22 19:00:00 +0000)