【问题标题】:Convert into wrong time while converting UTC time to current time zone time将UTC时间转换为当前时区时间时转换为错误时间
【发布时间】:2019-08-01 07:00:15
【问题描述】:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = inputFormate //HH:mm:ss
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")

let dt = dateFormatter.date(from: date)
// Setting daylightSavingTimeOffset still getting wrong output
//let offset = dateFormatter.timeZone.daylightSavingTimeOffset(for: dt!)
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = outputFormate //hh:mma
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "pm"
//return dateFormatter.string(from: (dt ?? Date()) + offset)
return dateFormatter.string(from: dt ?? Date())

这对 IST 来说是正确的,但给我 AEST(澳大利亚悉尼)的错误输出。

输入:17:00:00 (UTC)
输出:04:00am (AEST),应该是 03:00am

【问题讨论】:

  • 也许你应该添加夏令时?
  • @AlexandrKolesnik 通过添加夏令时仍然获得相同的输出。
  • print(TImeZone.current) 能得到什么?悉尼目前处于 UTC+10,所以是的,您应该从 17:00:00 UTC 获得 03:00am。我自己对您的代码的测试,将日期格式化程序的时区设置为 UTC+10,确实按预期给出了凌晨 3 点。所以我怀疑您当前的时区未设置为您认为的那样。
  • @rmaddy 时区是澳大利亚/悉尼(当前) - 标识符:“澳大利亚/悉尼” - 种类:“当前” ▿ 缩写:可选 - 一些:“GMT+10” - secondsFromGMT : 36000 - isDaylightSavingTime : false

标签: ios swift timezone datetime-format


【解决方案1】:

您遇到的问题来自于缺少特定的年、月和日。

因为目前它的计算时间是 2000-01-01,这是夏令时的问题。

我执行了你的代码,但它没有给我正确的时间。

我只更改了这两行,一切都很好

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dt = dateFormatter.date(from: "2019-08-01 10:00:00")

一般来说,您的代码没问题,但您需要检查日期以了解时区之间的正确偏移量。

【讨论】:

  • 我只有时间:(
  • 我不知道是什么情况,但您应该将其与今天或 2000-01-01 等某些东西联系起来,这样您的代码就可以了。
猜你喜欢
  • 2016-07-06
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 2019-05-31
相关资源
最近更新 更多