2015-08-17 47 views
3

如何可以在一個預定的時間區返回的NSDate從字符串的NSDate設置時區中迅速

let responseString = "2015-8-17 GMT+05:30" 
var dFormatter = NSDateFormatter() 
dFormatter.dateFormat = "yyyy-M-dd ZZZZ" 
var serverTime = dFormatter.dateFromString(responseString) 
println("NSDate : \(serverTime!)") 

上述代碼返回時間

2015-08-16 18:30:00 +0000 

回答

6

我如何能在預定時間區返回的NSDate?

你不行。

NSDate的實例不包含任何有關時區或日曆的信息。它只是簡單地識別世界時的一點。

你可以在任何你想要的日曆中解釋這個NSDate對象。 Swift的字符串插值(示例代碼的最後一行)使用使用UTC的NSDateFormatter(即輸出中的「+0000」)。

如果您希望NSDate的值作爲當前用戶日曆中的字符串,您必須爲其明確設置日期格式化程序。

+0

它爲什麼會返回與字符串不同的日期。我可以只返回字符串作爲NSDate沒有任何改動 –

+0

@MugunthanBalakrishnan正如我試圖解釋:'日期'不帶有關於時區的信息。因此,返回的日期與您提供的字符串沒有區別,只有以UTC表示。當您將時區設置爲「GMT + 05:30」時使用日期格式化程序時,它將返回用於輸入的完全相同的字符串值。 –

28

的日期格式已經被分配改爲日期格式化程序的dateFormat屬性。

let date = NSDate.date() 
let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd" 
let str = dateFormatter.stringFromDate(date) 
println(str) 

這將使用設備上的默認時區打印日期。只有當你需要根據不同的時區的輸出,那麼您需要添加例如

dateFormatter.timeZone = NSTimeZone(name: "UTC") 

也參考鏈接http://www.brianjcoleman.com/tutorial-nsdate-in-swift/