将DateTime从一个TimeZone转换为另一个TimeZone-Swift

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

我需要为用户将一个TimeZone转换为另一个TimeZone,并且正在使用下面的代码:

 let myTime = "2019-11-02 02:00:00"
 let dateFormatter = DateFormatter()
 dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
 let date = dateFormatter.date(from: myTime)
 let source_timezone = NSTimeZone(abbreviation: TimeZone.current.abbreviation()!)
 let local_timezone = NSTimeZone.system
 let source_EDT_offset = source_timezone?.secondsFromGMT(for: date!)
 let destination_EDT_offset = local_timezone.secondsFromGMT(for: date!)
 let time_interval : TimeInterval = Double(destination_EDT_offset - source_EDT_offset!)
 let final_date = NSDate(timeInterval: time_interval, since: date!)
print(final_date)

但是在crash nil找我(source_EDT_offset)

swift datetime timezone
1个回答
1
投票

这里是代码的清理版本,并提供了运行方式的示例,请注意,我选择的是此示例中myTime的“起始”时区

func changeToSystemTimeZone(_ date: Date, from: TimeZone, to: TimeZone = TimeZone.current) -> Date {
    let sourceOffset = from.secondsFromGMT(for: date)
    let destinationOffset = to.secondsFromGMT(for: date)
    let timeInterval = TimeInterval(destinationOffset - sourceOffset)
    return Date(timeInterval: timeInterval, since: date)
}

示例,请注意,您需要设置一个与您输入的日期(myTime)的时区匹配的语言环境>

let myTime = "2019-11-02 02:00:00"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

if let date = dateFormatter.date(from: myTime), let timeZone = TimeZone(abbreviation: "UTC") {
    let offsetedDate = changeToSystemTimeZone(date, from: timeZone)
    print(date, Calendar.current.timeZone)
    print(offsetedDate, timeZone)
}

2019-11-02 01:00:00 +0000欧洲/斯德哥尔摩(当前)2019-11-02 02:00:00 +0000 GMT(固定)

更新:添加了用于将时区转换为参数的参数

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