【问题标题】:How to convert time between timezones taking daylightsavings into account?如何在考虑夏令时的情况下转换时区之间的时间?
【发布时间】:2018-06-01 14:14:41
【问题描述】:

我有以下转换时间的功能:

static func convert(date: String) -> String {

        let formatter = DateFormatter()
        formatter.dateFormat = "h:m:s a"
        formatter.timeZone = TimeZone(identifier: "UTC")

        let convertedDate = formatter.date(from: date)
        formatter.timeZone = NSTimeZone.local

        return formatter.string(from: convertedDate!)
    }

由于我根据设备的时区设置新时区,因此我教导将考虑夏令时。但是当我传入2:00:00 PM 时,它返回了下午 3:0:0 而不是 4。

我是否遗漏了什么,是否有一种自动方法可以在时区之间正确转换时间?

【问题讨论】:

  • 不是根据一年中的时间节省日光吗?
  • @Rohlex32 是的,这取决于各国是否接受。
  • 专业提示:在询问有关时区的问题时,说明您所谈论的时区会很有帮助。 :)

标签: swift timezone nstimezone


【解决方案1】:

只有在日期已知的情况下处理夏令时才有意义。你没有约会,只有时间。所以convertedDate 将是 2001 年 1 月 1 日。因此,无论用户时区的夏令时规则是什么,在转换时间时都将使用该日期的语言环境。

如果您希望将时间视为“今天”,则可以设置日期格式化程序的defaultDate

formatter.defaultDate = Date()

如果您想要其他特定日期,请根据需要创建 Date 并使用它来设置 defaultDate

【讨论】:

  • 只是为了扩展您的答案,我只是简单地传递了带有时间yyyy-MM-dd h:m:s a 的日期,因此夏时制以这种方式有意义。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2018-04-12
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2021-11-08
相关资源
最近更新 更多