如何在考虑夏令时的情况下转换时区之间的时间?

How to convert time between timezones taking daylightsavings into account?

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

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 pm 而不是 4.

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

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

如果您希望时间被视为 "today" 那么您可以设置日期格式化程序的 defaultDate.

formatter.defaultDate = Date()

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