首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SwiftDate中更改timeZone?

如何在SwiftDate中更改timeZone?
EN

Stack Overflow用户
提问于 2017-10-23 18:42:34
回答 2查看 810关注 0票数 1

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

代码语言:javascript
复制
let region = Region(tz: timeZoneName.timeZone  , cal: cal, loc: cal.locale!)
let date = Date().inRegion(region: region).absoluteDate

这就是问题所在,区域被更改为选定的时区,但发布本地时区的日期。

EN

回答 2

Stack Overflow用户

发布于 2017-10-23 19:29:24

Date不包含时区。来自苹果的文档:一个特定的时间点,独立于任何日历或时区。

只要您想要向用户显示日期,时区就会生效。这就是DateFormatter的用途。正如@AlexWoe89已经指出的,它允许您将包含日期的字符串转换为Date对象,还允许您将给定日期转换为表示您在DateFormattertimeZone属性中设置的时区日期的字符串。

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2017-10-23 18:48:38

您可以使用DateFormatter作为解决方案,尝试如下所示:

代码语言:javascript
复制
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) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46887437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档