在 swift 4 中使用 nsdateformatter 转换日期

Convert date with nsdateformatter in swift 4

我将以下日期作为字符串:

2018-06-14T23:00:00.000Z
2018-06-14T00:00:00.000Z

我正在尝试使用此代码进行转换:

let fecha_finConvert = convert_fecha(fecha: dateString)
func convert_fecha(fecha: String)-> String{
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
    dateFormatter.locale = Locale.init(identifier: "es_EC")
    let dateObj = dateFormatter.date(from: fecha)
    dateFormatter.dateFormat = "dd 'de' MMM 'del' yyyy"
    let fecha_convert = dateFormatter.string(from: dateObj!)

    return fecha_convert
}

那应该 return 值是: 2018 年 6 月 14 日

第一次约会return不错,但第二次约会return2018 年 6 月 13 日

怎么了?我该如何解决? 提前致谢

这两个日期都是 UTC(零)时区,并且正在转换为您当地的时区。因此,相对于您所在的时区,结果是完全正确的。

如果要以 UTC 时区显示日期,可以在格式化程序上明确设置时区:

dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

在您的时间字符串中 - 2018-06-14T00:00:00.000Z - 您指定时区 - Z 代表 Zulu 时间,这基本上意味着 UTC 时区。

dateObj 转换为字符串时,需要指定 dateFormattertimeZone 属性。如果不指定,则默认为系统时区。我猜您设备的时区不是 UTC,因此存在差异。