2015-12-15 25 views
0

我解析了一些由Web服務返回的XML。字符串:2015-12-24T12:00:00位於fromTimestamp中,沒有時區。 「天才」(我不是這個意思)在幾分鐘內將時區信息保存在XML中的一個自己的字段中。所以300的意思是GMT + 05:00。NSDate和沒有時區信息的字符串

我一直在閱讀很多關於NSDate和所有這個時區的東西,我知道NSDate不在乎時區,那NSDateFormatter工作。

但是,爲了「轉換」沒有時區的時間戳,以便NSDate中的值代表GMT時間,我將GMT+05:00添加到字符串中,以便它變成2015-12-24T12:00:00 +05:00。這是如何做到的?當您從字符串轉換爲日期時不需要添加時區,NSDate認爲該值是GMT時間?那是我不瞭解的部分。只是在沒有時區信息的情況下轉換字符串是錯誤的,因爲NSDate將不能從NSDate中的值減去5小時?那是對的嗎?我很難解釋它。

回答

1

您的評估是正確的,您的解決方案是兩種可能的解決方案之一。

爲確保日期字符串正確轉換爲NSDate,你可以做兩件事情之一:

  1. 您需要確保日期字符串包括了時區信息和日期格式的格式字符串包括適當的格式說明符爲時區。這是你在你的問題中描述的。
  2. 您保留日期字符串,因爲您沒有時區信息。但是,您可以根據從XML獲取的時區字段在日期格式化程序上設置特定的時區。

兩種方法都會給你適當的NSDate

更新:我的第二個方法是顯示在回答馬丁R.

+0

所以我有關將時區信息字符串之前轉換到的NSDate的必要性推理是正確的?因爲否則時間戳會被解釋爲格林尼治標準時間,而不是先從中減去幾小時? (很難解釋我的意思,希望你能理解)。 – LuckyLuke

+0

關閉。如果沒有從日期字符串解析特定的時區信息,並且日期格式化程序沒有設置特定的時區,則日期字符串將被視爲「本地」時間,而不是GMT。 – rmaddy

+0

這是否意味着它使用從系統獲取的時區? – LuckyLuke

1

明確設置日期格式化程序 的時區可能會更簡單。示例(爲簡潔起見省略了錯誤檢查):

let fromTimestamp = "2015-12-24T12:00:00" 
let timeZoneInfo = "300" 

let fmt = NSDateFormatter() 
fmt.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" 

let secondsFromGMT = Int(timeZoneInfo)! * 60 
fmt.timeZone = NSTimeZone(forSecondsFromGMT: secondsFromGMT) 

let date = fmt.dateFromString(fromTimestamp)