Swift 日期格式,从服务器取回的日期与发送到服务器的日期不同

Swift date formatting, getting the date back from server is not the same as sent to the server

我正在尝试解析发送到服务器的日期。

现在从服务器收到的日期是 "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!))")

打印语句打印以下结果:May 11 04:04 AM

以上结果完全错误。我应该返回从服务器收到的相同日期,但格式不同。

但是 newReadableDate 变量打印出正确的日期:2016-05-10 22:34:00 +0000

但是在我格式化之后,它给了我错误的日期。

上面的代码有什么问题?

你的代码没问题。输出是正确的。您解析的日期字符串采用 UTC 时间。但是你在当地时间记录最终结果。您必须居住在比 UTC 早 5.5 小时的时区。

日期字符串中的Z表示"Zulu"时间,是UTC时间。因此日期格式化程序将字符串解析为 UTC 时间。

然后您选择打印结果 NSDate。默认情况下,NSDateFormatter 将在语言环境时间从 NSDate 生成一个字符串。

UTC 时间 22:34 2016 年 5 月 10 日与您当地 (+0530) 时区的 2016 年 5 月 11 日 04:04 时间完全相同。