2017-10-11 219 views
0
let dateString = "2017-10-08T00:12:00.000Z" 
let formatter = DateFormatter() 
formatter.calendar = Calendar(identifier: .iso8601) 
formatter.locale = Locale(identifier: "en_US_POSIX") 
formatter.timeZone = TimeZone(secondsFromGMT: 0) 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" 


let date = formatter.date(from: dateString)! 



let components = Calendar.current.dateComponents(in: TimeZone(identifier: "America/New_York")!, from: date) 

print("Day - \(components.day!)") 
print("Month - \(components.month!)") 
print("Year - \(components.year!)") 

print("Hour - \(components.hour!)") 
print("Min - \(components.minute!)") 
print("Second - \(components.second!)") 


print("Final Date - \(components.date!)") 

顯示由運行上述代碼我得到了輸出錯誤日期是從DateComponets

天 - 7
月 - 10
年 - 2017年
小時 - 20
最小 - 12
秒 - 0
決賽日期 - 2017-10-08 00:12:00 +0000
但是我的預期日期應該是
最後日期 - 2017年10月7日20點12分00秒+0000

+0

您的日期是正確的。爲什麼你最後的日期應該與原始日期字符串不同? –

+0

它只是一個時間點。它沒有時區。 –

+0

組件反映了原始日期。您還應該打印時區組件 –

回答

0

I GOT解決方案@Leo Dabus說與時區問題,所以

let dateString = "2017-10-08T00:12:00.000Z" 
    let formatter = DateFormatter() 
    formatter.calendar = Calendar(identifier: .iso8601) 
    formatter.locale = Locale(identifier: "en_US_POSIX") 
    formatter.timeZone = TimeZone(secondsFromGMT: 0) 
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" 


    let date = formatter.date(from: dateString)! 

    let components = Calendar.current.dateComponents(in: TimeZone(identifier: "America/New_York")!, from: date) 

    //Converting part 
    let gregorian = Calendar(identifier: .gregorian) 
    var dateComponents = components 
    dateComponents.timeZone = TimeZone.init(identifier: "UTC") //Here is the logic 
    let myDate = gregorian.date(from: dateComponents)! 
    print(myDate) 

現在我得到的轉換日期作爲輸出。 2017-10-07 20:12:00 +0000

+0

這是錯誤的你不應該''2017-10-07 20:12:00 + 0000'因此 –

+0

添加那些到你原來的代碼'formatter.timeZone = TimeZone (標識符:「美洲/紐約」)' 'formatter.string(from:components.date!)' –

+0

爲什麼我不會在紐約的日期 –