2015-07-03 66 views
0

我有我收到的字符串,每當有新的遠程通知時收到。我使用解析我的後端。我檢索到的字符串來自「createdAt」列。如何將字符串轉換爲NSDate?

我試過下面的代碼:

var ca = "2015-07-03T03:16:17.220Z" 
    var dateFormater : NSDateFormatter = NSDateFormatter() 
    dateFormater.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" 
    let date = dateFormater.dateFromString(ca) 

    println(date) 

但println的是給我無,我覺得有什麼不對我的日期格式。我怎樣才能解決這個問題?

+0

看起來像是ISO 8601的日期。您可能只想使用Peter Hosey的[開放源代碼和廣泛使用的ISO 8601日期格式化器](https://github.com/boredzo/iso-8601-date-formatter) –

+0

請參閱:[ICU格式日期和時間](http ://userguide.icu-project.org/formatparse/datetime) – zaph

回答

5

您錯過了毫秒。因此:

dateFormater.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 

注意,從日期字符串轉換爲NSDate的時候,你不應該引用Z。如果您引用Z,它將與文字Z字符匹配,但不會正確反映該日期字符串實際上是祖魯/格林尼治標準時間/ UTC。


如果你想創建格式化也去其他的方式,轉換NSDate對象的字符串,在這種情況下,你應該引用Z,但在這種情況下,你必須記住要明確設置時區:

dateFormater.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 
dateFormater.timeZone = NSTimeZone(forSecondsFromGMT: 0) 

順便說一句,不要忘記設置localeApple Technical Q&A 1480

dateFormater.locale = NSLocale(localeIdentifier: "en_US_POSIX") 
+0

好吧,沒有偏移的Z默認爲GMT,我沒有意識到。 – zaph

+0

是的,一個非引用的資本'Z'(根據您與我們分享的[ICU格式日期和時間](http://userguide.icu-project.org/formatparse/datetime))指示格式化程序將時區解析爲字符串。當它在日期字符串中遇到一個「Z」(不要與格式化字符串中的「Z」混淆)時,它會正確解析並識別爲GMT/UTC。比在格式化字符串中使用文字'Z'要靈活一點。 – Rob

+0

謝謝,你的答案適合我 –