日期格式化程序意外输出


let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MMMM dd, yyyy 'at' HH:mm:ss aa z"
dateFormatter.amSymbol = "AM"
let dateString = "February 02, 2022 at 10:49:06 AM GMT+3"
print(dateFormatter.date(from: dateString)!)

打印->2022-02-01 21:49:06 +0000

为什么打印21:49而不是10:49

所以,是的,我们都错过了一些东西。时间格式应该使用hh,而不是HH(HH是24小时的时间,里面有一些奇怪的对话(

所以,我在操场上测试了。。。

let threeHoursFromGMT = Measurement(value: 3, unit: UnitDuration.hours).converted(to: UnitDuration.seconds).value
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MMMM dd, yyyy 'at' hh:mm:ss aa z"
dateFormatter.amSymbol = "AM"
dateFormatter.timeZone = TimeZone.init(secondsFromGMT: Int(threeHoursFromGMT))
let dateString = "February 02, 2022 at 10:49:06 AM GMT+3"
let date = dateFormatter.date(from: dateString)!
dateFormatter.string(from: dateFormatter.date(from: dateString)!)

它生成了

"Feb 2, 2022 at 6:49 PM" // let date = dateFormatter.date(from: dateString)!
"February 02, 2022 at 10:49:06 AM GMT+3" // dateFormatter.string(from: dateFormatter.date(from: dateString)!)

第一个输出基于我的时区(+11(,第二个输出基于格式化程序要求(使用+3(

最新更新