2015-11-06 137 views
0

我必須在此日期2015-11-06T18:00:00-0500如何將字符串轉換爲日期,又不失格式

我的格式是yyyy-MM-dd'T'HH:mm:ssZ

我嘗試

let startDateString = "2015-11-06T18:00:00-0500" 
let format = NSDateFormatter() 
format.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 

let startDateBtnEnd = format.dateFromString(startDateString) 
println("startDateBtnEnd 2 \(startDateBtnEnd)") 

但日誌 startDateBtnEnd 2 Optional(2015-11-07 00:00:00 +0000)

+0

這是沒有意義的。 NSDate代表絕對時間點。它沒有格式(也沒有時區)。 –

+0

日期和字符串是不同的。如果不以某種方式將日期轉換爲字符串,則無法記錄日期。生成描述時,NSDate不使用ISO格式。 – Wain

+0

'2015-11-06T18:00:00-0500'表示與「2015-11-07 00:00:00 + 0000」相同的時間。時區是日期如何表示爲字符串的函數。不要擔心'println'顯示它像它一樣。如果您關心結果字符串顯示的時區,請使用其他日期格式化程序在所需時區中創建該字符串。 – Rob

回答

1

NSDate以UTC存儲日期。您可以在任何時區將其轉換爲相同的時間。但失去了太多的神經元在精神上轉換NSDate從一個時區到另一個後,我決定把我自己的擴展添加到NSDate打印出來在本地時區,而不是:

extension NSDate { 
    func toString(timeZone: NSTimeZone = NSTimeZone.localTimeZone()) -> String { 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
     formatter.timeZone = timeZone 

     return formatter.stringFromDate(self) 
    } 
} 

// Usage: 
print("startDateBtnEnd 2 \(startDateBtnEnd.toString())") 
相關問題