将 Z 格式的服务器日期转换为本地 nsdate

Converting server date with Z format to local nsdate

我需要将此服务器日期(来自 kinvey 请求)转换为本地时区。

我正在使用以下代码:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-ddTHH:mm:ss.sTZD"
print(dateFormatter.dateFromString(newValue))

日期格式是这样的:

ect = "2016-08-28T16:30:06.553Z" or lmt = "2016-08-28T16:30:06.553Z"

当我打印日期时它是零,你知道我做错了什么吗?。我认为这可能是 dateFormat

的结尾

如果您的应用只能定位 iOS7+,您可以使用以下格式符号:

Fixed Formats (in Data Formatting Guide)

Unicode 技术标准 #35 version tr35-31

second | S | 1..n | 3456 | Fractional Second - truncates (like other time fields) to the count of letters. (example shows display using pattern SSSS for seconds value 12.34567)

zone | X | 1 | -08,+0530,Z | The ISO8601 basic format with hours field and optional minutes field. The ISO8601 UTC indicator "Z" is used when local time offset is 0. (The same as x, plus "Z".)

因此,要解析小数秒,请使用大写 'S'、

和 'X' 用于时区,包括作为 UTC 的“Z”。

试试这个:

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSX"

(我转义了'T',因为它可能在将来用作另一个时间格式符号。)


PS。虽然我找不到描述将“Z”解释为 UTC+0000 的日期格式的线程,但如果满足某些条件,忽略或删除它可能不是一个糟糕的解决方案。请找到您的最佳解决方案。