我已经在我的应用程序中显示了时区列表。如果用户选择一个特定的时区,我需要将本地时区更改为用户选择的时区。
let region = Region(tz: timeZoneName.timeZone , cal: cal, loc: cal.locale!)
let date = Date().inRegion(region: region).absoluteDate这就是问题所在,区域被更改为选定的时区,但发布本地时区的日期。
发布于 2017-10-23 19:29:24
Date不包含时区。来自苹果的文档:一个特定的时间点,独立于任何日历或时区。
只要您想要向用户显示日期,时区就会生效。这就是DateFormatter的用途。正如@AlexWoe89已经指出的,它允许您将包含日期的字符串转换为Date对象,还允许您将给定日期转换为表示您在DateFormatter的timeZone属性中设置的时区日期的字符串。
let date = Date()
var dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
dateFormatter.timeZone = TimeZone(identifier: "America/Los_Angeles")
let dateString1 = dateFormatter.string(from: date)
dateFormatter.timeZone = TimeZone(identifier: "Germany/Berlin")
let dateString2 = dateFormatter.string(from: date)这将把2017-10-23 04:27存储在dateString1中,而同一日期则指向dateString2中的2017-10-23 13:27。
发布于 2017-10-23 18:48:38
您可以使用DateFormatter作为解决方案,尝试如下所示:
let dateString = "<yourDateAsString>"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // => there are a lot of identifiers you can use
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.defaultDate = Date()
dateFormatter.dateFormat = "dd-MM-yyyy hh:mm” // => your needed time format
let convertedDate = dateFormatter.date(from: dateString) https://stackoverflow.com/questions/46887437
复制相似问题