如何使用 Swift 中的时区格式化日期?

How to format a date using timezone in Swift?

我检查了其他问题,但 none 对我帮助很大。

我有以下字符串:

let dateString = "2018-04-29T21:00:00.000Z"

我已经使用以下方法成功地将它转换为日期:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let convertedDate = dateFormatter.date(from: dateString)

但现在我只想要时间 "hh:mm a" 使用 timezone 例如 "+8" 。我尝试了以下方法,但它不起作用:

let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "UTC+8")
dateFormatter.dateFormat = "hh:mm a"
let requiredTime = dateFormatter.string(from: convertedDate!)

谁能帮我解决这个问题?

您想要的格式是hh:mm a Z,它将提供+0800

您想创建一个距格林威治标准时间 +8 小时的 TimeZone,通常我更喜欢使用适当的缩写(即 AET),但我想如果您没有,您可以使用 secondsFromGMT 创建 TimeZone,例如...

let tz = TimeZone(secondsFromGMT: 8 * 60 * 60)
let toFormatter = DateFormatter()
toFormatter.timeZone = tz
toFormatter.dateFormat = "hh:mm a Z"
let requiredTime = toFormatter.string(from: convertedDate!)

根据您的示例数据,将产生一个值...

05:00 AM +0800