2015-10-07 55 views
0

我收到日期:從字符串從MySQL數據庫在這種形式的NSDate斯威夫特

dd/MM/yyyy HH:mm:ss 

例如:19/09/2015 14:39:18

我想轉換此字符串在斯威夫特的NSDate對象,基於這個原因,我沒有像這樣:

var d = "19/09/2015 14:39:18" 
var form : NSDateFormatter = NSDateFormatter() 
form.dateFormat = "dd/MM/yyyy HH:mm:ss" 
print(form.dateFromString(d)!) 

,但我得到的最後一次打印此:

2015-09-19 12:39:18 +0000 

怎麼了?

+1

的可能的複製[爲什麼NSDate的是報告錯誤的日期?](http://stackoverflow.com/questions/6741519/why-nsdate-is-reporting-the-wrong-date) – rmaddy

回答

0

你需要告訴你的NSDateFormatter傳入的日期字符串爲GMT時區格式:

var d = "19/09/2015 14:39:18" 
var form : NSDateFormatter = NSDateFormatter() 
form.timeZone = NSTimeZone(name: "GMT") 
form.dateFormat = "dd/MM/yyyy HH:mm:ss" 
print(form.dateFromString(d)!) 

打印:

"2015-09-19 14:39:18 +0000" 

如果省略手動設置timeZone特性,NSDateFormatter將繼承當前系統時區,並將其解析爲好像它是一個本地格式化時間。然後當你打印新的NSDate對象,它顯示在格林尼治標準時,這將導致偏移量。

編輯:一旦你有你NSDate對象,你就可以使用相同的格式去爲字符串表示具有相同的格式:

var d = "19/09/2015 14:39:18" 
var form : NSDateFormatter = NSDateFormatter() 
form.timeZone = NSTimeZone(name: "GMT") 
form.dateFormat = "dd/MM/yyyy HH:mm:ss" 
form.stringFromDate(form.dateFromString(d)!) // "19/09/2015 14:39:18" 
+0

但它是錯誤的,因爲我想要打印19/09/2015 14 :39:18 – Alex

+0

我想要相同的輸入日期格式 – Alex

+0

您的問題是關於小時偏移嗎?或者最後的「+0000」?如果後者,你可以簡單地使用'form.stringFromDate(...)' –