在 SWIFT 中将 UTC 时间转换为 PST

时间:2021-06-30 11:27:38

标签: ios swift calendar

我需要将 UTC 时间转换为 PST

从支持中,我得到 UTC 日期,如“2021-06-25T07:00:00Z”

我需要在 Hstack 中显示从提供的 UTC 日期到当前日期的日期。

我写了下面的代码。

任何人都可以帮助我。

func datesRange(from:Date, to:Date)->[Date]{
        
        if from > to {return [Date]()}
        
        var tmpdate = from
        var array:[Date] = []
        
        while tmpdate <= to {
            array.append(tmpdate)
            tmpdate = Calendar.current.date(byAdding: .day,value: 1, to: tmpdate)!
        }
        return array
    }


extension Date{
    func convertTimezone(timezone:String)-> Date{
        
        if let targettimeZone = TimeZone(abbreviation: timezone){
            let delta = TimeInterval(targettimeZone.secondsFromGMT(for: self) - TimeZone.current.secondsFromGMT(for: self))
            return addingTimeInterval(delta)
        }else{
            return self
        }
        
    }
}

我使用如下

func getrangeDays(){
        
        let startday = "2021-06-25T07:00:00Z"
        let dateformater = DateFormatter()
        dateformater.locale = Locale(identifier: "en_US_POSIX")
        dateformater.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
        
        if let date = dateformater.date(from: startday){
            let rangedays = datesRange(from:date.convertTimezone(timezone: "PST") , to: Date().convertTimezone(timezone: "PST"))
            
            print(rangedays)
        }
        
    }

1 个答案:

答案 0 :(得分:0)

你的 convertTimezone() 函数没有意义。它正在尝试将 Date 转换为不同的时区。 Date 对象没有时区。这是一个瞬间,在地球上的任何地方。时区仅在您想要显示 Date 或进行时区特定日期计算时才有意义。 (在这种情况下,您希望创建一个 Calendar 对象并将其时区设置为所需的时区,然后使用该 Calendar 进行日期计算。)

去掉那个功能。 将您的输入日期字符串转换为您现在所做的日期(尽管您可能希望使用 ISO8601DateFormatter 而不是常规日期格式化程序,因为它们专门用于处理 ISO8601 日期。)

使用datesRange() 函数构建日期范围。

然后使用第二个 DateFormatter 在 PST 中显示您的日期。 (不是日期转换为 PST。那没有意义。)