MST缩写为错误的时区转换

发布于 2025-01-27 09:31:20 字数 1956 浏览 2 评论 0原文

在我的代码中,我会从服务器中获得时间及其格式时区,例如“ IST”,“ MST”,并且通过使用该时间区域,我需要将给定时间转换为本地设备的时间。为此,我使用的是TimeZone(缩写::)方法及其与“ MST”格式以外的所有格式的正常工作。一小时后,我会得到转换的时间。

在以下代码中,我将输出为04:30 pm和04:29 pm,这是实际时间后一小时。 (在这里给定时间的格式是“ MST”)

let startDateString = "04:00:00" // expected 3:30pm after convertine to IST
let endDateString = "03:59:59"
let timeZoneString = "MST"

func getTime() {
    if let scheduleTimeZone = TimeZone(abbreviation: timeZoneString)  {
        let startScheduledTime = toScheduledTime(startDateString, using: scheduleTimeZone)
        let endScheduledTime = toScheduledTime(endDateString, using: scheduleTimeZone)
        
        print(startScheduledTime)
        print(endScheduledTime)
    }

}


/// Method to get local time for scheduled time
func toScheduledTime(_ time: String, using timeZone: TimeZone) -> String {
    let today = "2022-05-09"
    guard  let dateTimeScheduleTZ = (today + " " + time).dateTime(createWithTZ: timeZone,
                                                                       format: "yyyy-MM-dd HH:mm:ss") else {
        return ""
    }
    return dateTimeScheduleTZ.dateTime(createLocal: "hh:mma")
}



extension String {
    
    func dateTime(createWithTZ timeZone: TimeZone,
                  format: String) -> Date? {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        dateFormatter.timeZone = timeZone
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        guard let date = dateFormatter.date(from: self) else {
            return nil
        }
        return date
    }
}

extension Date {
    func dateTime(createLocal format: String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        dateFormatter.timeZone = TimeZone.current
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        return dateFormatter.string(from: self)
    }
}

getTime()

In my code I am getting time and its format time zone like "IST", "MST" from a server and by using that I need to convert a given time to local device's time. For that I am using TimeZone(abbreviation:) method and its working fine with all formats except "MST" format. I am getting converted time one hour after.

In following code I am getting output as 04:30PM and 04:29PM which is one hour after the actual time. (here given time's format is "MST")

let startDateString = "04:00:00" // expected 3:30pm after convertine to IST
let endDateString = "03:59:59"
let timeZoneString = "MST"

func getTime() {
    if let scheduleTimeZone = TimeZone(abbreviation: timeZoneString)  {
        let startScheduledTime = toScheduledTime(startDateString, using: scheduleTimeZone)
        let endScheduledTime = toScheduledTime(endDateString, using: scheduleTimeZone)
        
        print(startScheduledTime)
        print(endScheduledTime)
    }

}


/// Method to get local time for scheduled time
func toScheduledTime(_ time: String, using timeZone: TimeZone) -> String {
    let today = "2022-05-09"
    guard  let dateTimeScheduleTZ = (today + " " + time).dateTime(createWithTZ: timeZone,
                                                                       format: "yyyy-MM-dd HH:mm:ss") else {
        return ""
    }
    return dateTimeScheduleTZ.dateTime(createLocal: "hh:mma")
}



extension String {
    
    func dateTime(createWithTZ timeZone: TimeZone,
                  format: String) -> Date? {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        dateFormatter.timeZone = timeZone
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        guard let date = dateFormatter.date(from: self) else {
            return nil
        }
        return date
    }
}

extension Date {
    func dateTime(createLocal format: String) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        dateFormatter.timeZone = TimeZone.current
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        return dateFormatter.string(from: self)
    }
}

getTime()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文