我需要将 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)
}
}
答案 0 :(得分:0)
你的 convertTimezone()
函数没有意义。它正在尝试将 Date
转换为不同的时区。 Date
对象没有时区。这是一个瞬间,在地球上的任何地方。时区仅在您想要显示 Date
或进行时区特定日期计算时才有意义。 (在这种情况下,您希望创建一个 Calendar
对象并将其时区设置为所需的时区,然后使用该 Calendar
进行日期计算。)
去掉那个功能。 将您的输入日期字符串转换为您现在所做的日期(尽管您可能希望使用 ISO8601DateFormatter 而不是常规日期格式化程序,因为它们专门用于处理 ISO8601 日期。)
使用datesRange() 函数构建日期范围。
然后使用第二个 DateFormatter
在 PST 中显示您的日期。 (不是将日期转换为 PST。那没有意义。)