IOS UTC 到本地时间的转换不准确
IOS conversion of UTC to local time not accurate
我正在尝试将 UTC 转换为设备本地时间 Swift 4。为此,我在 Whosebug
上找到了许多解决方案,并在我的代码中实现了它们。我的代码工作正常,但它不是 return 正确答案。
我的代码是:
func UTCToLocal() -> String {
let a = "2:36:27 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm:ss aa"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: a)
dateFormatter.timeZone = TimeZone.current
dateFormatter.defaultDate = Date()
dateFormatter.dateFormat = "hh:mm:ss aa"
return dateFormatter.string(from: dt!)
}
根据我的黎巴嫩当地时间,此方法应 return 值 5:36:27 下午。但是,现在是 returning 4:36:27 下午。
注意:我检查了我设备的当地时间并且设置正确
这是由于 Daylight Saving Time in Lebanon. You can take the time offset into consideration by using the daylightSavingTimeOffset(for:)
您所在时区的方法:
func UTCToLocal() -> String {
let a = "2:36:27 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm:ss aa"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: a)
dateFormatter.timeZone = TimeZone.current
let offset = dateFormatter.timeZone.daylightSavingTimeOffset(for: dt!)
dateFormatter.defaultDate = Date()
dateFormatter.dateFormat = "hh:mm:ss aa"
return dateFormatter.string(from: dt! + offset)
}
UTCToLocal()
请注意 dt
是 "Jan 1, 2000 at 2:36 PM" 因为您没有在 [=16= 中指定 .day
、.month
和 .year
日期组件]
我正在尝试将 UTC 转换为设备本地时间 Swift 4。为此,我在 Whosebug
上找到了许多解决方案,并在我的代码中实现了它们。我的代码工作正常,但它不是 return 正确答案。
我的代码是:
func UTCToLocal() -> String {
let a = "2:36:27 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm:ss aa"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: a)
dateFormatter.timeZone = TimeZone.current
dateFormatter.defaultDate = Date()
dateFormatter.dateFormat = "hh:mm:ss aa"
return dateFormatter.string(from: dt!)
}
根据我的黎巴嫩当地时间,此方法应 return 值 5:36:27 下午。但是,现在是 returning 4:36:27 下午。
注意:我检查了我设备的当地时间并且设置正确
这是由于 Daylight Saving Time in Lebanon. You can take the time offset into consideration by using the daylightSavingTimeOffset(for:)
您所在时区的方法:
func UTCToLocal() -> String {
let a = "2:36:27 PM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm:ss aa"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let dt = dateFormatter.date(from: a)
dateFormatter.timeZone = TimeZone.current
let offset = dateFormatter.timeZone.daylightSavingTimeOffset(for: dt!)
dateFormatter.defaultDate = Date()
dateFormatter.dateFormat = "hh:mm:ss aa"
return dateFormatter.string(from: dt! + offset)
}
UTCToLocal()
请注意 dt
是 "Jan 1, 2000 at 2:36 PM" 因为您没有在 [=16= 中指定 .day
、.month
和 .year
日期组件]