错误日期是从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
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
这是错误的你不应该''2017-10-07 20:12:00 + 0000'因此 –
添加那些到你原来的代码'formatter.timeZone = TimeZone (标识符:“美洲/纽约”)' 'formatter.string(from:components.date!)' –
为什么我不会在纽约的日期 –
您的日期是正确的。为什么你最后的日期应该与原始日期字符串不同? –
它只是一个时间点。它没有时区。 –
组件反映了原始日期。您还应该打印时区组件 –