错误日期是从DateComponets

问题描述:

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

组件反映了原始日期。您还应该打印时区组件 –

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

为什么我不会在纽约的日期 –