如何在考虑夏令时的情况下转换时区之间的时间?
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
。
我有以下转换时间的功能:
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
。