2016-05-10 65 views
0

我想解析發送到服務器的日期。快速日期格式化,從服務器獲取日期不一樣發送到服務器

現在從服務器收到的日期是「2016-05-10T22:34:00.000Z」

,這裏是我的代碼來獲得一個格式化的日期從上述日期字符串:

let format="yyyy-MM-dd'T'HH:mm:ss.SSSZ" 
    let dateFmt = NSDateFormatter() 
    dateFmt.dateFormat = format 
    let newreadableDate = dateFmt.dateFromString(dateString) 
    print(newreadableDate!) 
    dateFmt.dateFormat = "MMM dd hh:mm a" 
      print("Formatted date is : \(dateFmt.stringFromDate(newreadableDate!))") 

print語句打印結果如下:5月11日上午04時04分

上述結果是完全錯誤的。我應該回到我從服務器收到的日期不同但格式不同的日期。

但newReadableDate變量打印出正確的日期:2016年5月10日22時34分○○秒+0000

但經過我格式化,它給了我錯誤的日期。

上述代碼有什麼問題?

回答

0

你的代碼沒問題。輸出是正確的。您解析的日期字符串是UTC時間。但你在當地時間記錄最終結果。您必須居住在UTC時間5.5小時的時區。

日期字符串中的Z表示其UTC時間的「祖魯」時間。所以日期格式化程序將該字符串解析爲UTC時間的時間。您可以選擇打印NSDate。默認情況下,NSDateFormatter將在區域設置時間內從NSDate生成一個字符串。

2016年5月10日上午22:34 UTC時間與2016年5月11日上午04:04在你本地(+0530)時區的時間完全相同。

+0

我不明白爲什麼'newReadableDate'以UTC打印日期。我認爲'Z'使日期格式化程序將字符串日期解釋爲UTC,但打印時使用本地時區。我在UTC-4,'newreadableDate'是'2016年5月10日,6:34 PM'。 – paulvs

+1

@paulvs'print'調用正在打印的對象的'description'方法。 'NSDate description'的實現是以UTC時間記錄日期。這就是'+ 0000'的含義。它表示時間正在UTC時間的+0000時區顯示。 – rmaddy

+0

這是真的。我想清楚它爲什麼在我的本地時區顯示時間 - 我使用的是Playground,右側的默認打印似乎使用本地時區而不是默認的UTC時區。 – paulvs