簡體   English   中英

將UTC NSDate轉換為本地NSDate不起作用

[英]Convert UTC NSDate into Local NSDate not working

我有一個從服務器獲取的字符串,為"yyyy-MM-dd'T'HH:mm:ss.SSS'Z"我將此字符串轉換為NSDate。

class func convertUTCDateToLocateDate(dateStr:String) -> NSDate{
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
        dateFormatter.timeZone = NSTimeZone(name: "UTC")
        let date = dateFormatter.dateFromString(dateStr)


    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z"
    dateFormatter.timeZone = NSTimeZone.localTimeZone()
    let timeStamp = dateFormatter.stringFromDate(date!)
    let dateForm = NSDateFormatter()
    dateForm.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
    dateForm.timeZone = NSTimeZone.localTimeZone()
    let dateObj = dateForm.dateFromString(timeStamp)
    return dateObj!
}

假設參數字符串為“ 2016-11-05T12:00:00.000Z”,但是當我轉換此字符串並返回一個NSDate對象時,它不會根據我的本地時間更改時間。 我在timeStamp字符串中獲得了正確的時間(在上面的代碼中)。 但是,當我嘗試將timeStamp字符串轉換為NSDate時,它再次顯示了作為參數獲取的日期和時間。

您不應該更改NSDate的時間。 NSDate只是一個時間點,以秒為單位。 他們不了解時區,天,月,年,小時,分鍾,秒……的信息。如果直接打印,它們將始終以UTC輸出時間。
如果您更改日期以顯示時區,則實際上是在更改UTC時間-因此,無論時區如何,日期都將代表另一個時間點。
通過不更改它們來保持它們完整無缺,相反,當您需要顯示它們時,可以通過日期格式化程序進行操作。
如果需要進行與時區無關的時間計算,則也可以使用NSDateComponents。

NSDate沒有時區。 這是一個時間點,獨立於任何事物,尤其是時區。 您不能“將UTC NSDate轉換為本地NSDate”,該語句本身沒有任何意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM