Swift DateFormatter错误地转换字符串日期/时间



我正在尝试将时间字符串转换为Swift日期:

Sun 11:00a PDT

太阳7:00 PDT

周一11:00 PDT

周一7:00 PDT

周二11:00a PDT

周二07:00 PDT

周三10:00a PDT

周三7:00 PDT

这些代表了各种企业的营业和关门时间。

虽然Date对象转换成功(意味着返回的可选对象不是nil),但是时间是不正确的。下面是我的代码:

let dateFormatter = DateFormatter()
let shortDays = ["Sun-","Mon-","Tue-","Wed-","Thu-","Fri-","Sat-"]

dateFormatter.dateFormat = "E HH:mmaaaaa zzz"
var daysCounter = 0

for hours in hoursArray {
let dayHours = shortDays[daysCounter]+hours

//split hours
let splitHours = dayHours.split(separator: "-")
//print(String(splitHours[0]+" "+splitHours[1]+" "+timezone))
//print(String(splitHours[0]+" "+splitHours[2]+" "+timezone))
//create an opening time date optional

let openingOpt = dateFormatter.date(from: String(splitHours[0]+" "+splitHours[1]+" "+timezone))

//create a closing time date optional
let closingOpt = dateFormatter.date(from: String(splitHours[0]+" "+splitHours[2]+" "+timezone))

//unwrap those optionals
guard let opening = openingOpt else{
//deal with "closed"
print("Something happened with unwrapping opening time optional: (String(describing: openingOpt))")
return
}

guard let closing = closingOpt else{
//deal with "closed"
print("Something happened with unwrapping closing time optional: (String(describing: closingOpt))")
return
}

self.fullHours.append(opening)
self.fullHours.append(closing)
daysCounter += 1
}
for hours in fullHours{
print(hours)
}
然而,当我使用上面的for循环打印转换后的日期时,我得到了不正确的结果。有些结果是好的;例如,晚上7点的关门时间似乎转换得很合适。左边是打印的Date对象,右边是括号内的原始输入:

2000-01-02 07:00:00 +0000 (Sun 11:00a PDT)

2000-01-02 19:00:00 +0000(周日07:00 p PDT)

2000-01-03 07:00:00 +0000(星期一11:00a PDT)

2000-01-03 19:00:00 +0000(星期一7:00p PDT)

2000-01-04 07:00:00 +0000(星期二11:00a PDT)

2000-01-04 19:00:00 +0000(星期二7:00p PDT)

2000-01-05 07:00:00 +0000(周三10:00a PDT)

2000-01-05 19:00:00 +0000(周三7:00p PDT)

2000-01-06 07:00:00 +0000(星期四11:00a PDT)

2000-01-06 19:00:00 +0000(星期四7:00p PDT)

2000-01-07 07:00:00 +0000(星期五11:00a PDT)

2000-01-07 19:00:00 +0000(星期五7:00p PDT)

12000-01-01 07:00:00 +0000(星期六11:00a PDT)

2000-01-01 19:00:00 +0000(星期六7:00p PDT)

特别是,为什么星期六被转换为12000年?为什么星期三上午10点仍然显示在UTC早上7点?我很困惑,也很失落,通过搜索找不到类似的问题。任何帮助将不胜感激,谢谢!

注意:我正在使用Xcode 13.0 Beta 5,开发iOS 15 Beta 5。

编辑:这是日期时间格式的来源:http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns

编辑2:而且,我发现任何时间都要加上"转换为早上7点,以及任何附加"p"转换到晚上7点。所以…??

答案是我的格式是关闭的。应该是h:mm,而不是HH:mm。感谢Sweeper详细的回答!