在 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
转换为字符串时,需要指定 dateFormatter
的 timeZone
属性。如果不指定,则默认为系统时区。我猜您设备的时区不是 UTC
,因此存在差异。
我将以下日期作为字符串:
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
转换为字符串时,需要指定 dateFormatter
的 timeZone
属性。如果不指定,则默认为系统时区。我猜您设备的时区不是 UTC
,因此存在差异。