繁体   English   中英

如何在SwiftDate中更改timeZone?

[英]How to change the timeZone in SwiftDate?

我已经在我的应用程序中显示了时区列表。 如果用户选择了特定时区,则需要由用户将本地时区更改为所选时区。

let region = Region(tz: timeZoneName.timeZone  , cal: cal, loc: cal.locale!)
let date = Date().inRegion(region: region).absoluteDate

这是问题所在,该地区已更改为所选时区,但是发布本地时区的日期。

Date包含时区。 来自Apple的文档: 独立于任何日历或时区的特定时间点。

您想向用户显示日期时,时区就会起作用。 这就是DateFormatter的用途。 正如@ AlexWoe89所指出的,它使您可以将包含日期的字符串转换为Date对象,还可以将给定的日期转换为表示设置为DateFormattertimeZone属性的时区中的日期的字符串。

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中,而相同的日期将导致2017-10-23 13:27

您可以使用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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM