IOS将UTC转换为本地时间不准确

问题描述 投票:0回答:1

我正在尝试将UTC转换为Swift 4中的设备本地时间。我在stackoverflow上找到了很多解决方案,我在我的代码中实现了它们。我的代码工作正常,但它没有返回正确的答案。

我的代码是:

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!)
}

根据我当地时间黎巴嫩,这种方法应该返回值5:36:27 PM。但是,它将在下午4:36:27返回。

注意:我检查了设备的本地时间并且设置正确

ios swift utc
1个回答
1
投票

这是由于黎巴嫩的Daylight Saving Time。您可以在您的时区使用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是“2000年1月1日下午2:36”因为你没有在.day中指定.month.yeara日期组件

© www.soinside.com 2019 - 2024. All rights reserved.