为 DateFormatter 设置全局时区
Posted
技术标签:
【中文标题】为 DateFormatter 设置全局时区【英文标题】:Set global TimeZone for DateFormatter 【发布时间】:2017-05-31 02:59:57 【问题描述】:我在这里搜索了 SO,但找不到有用的线程来完成我想要的。我是 Swift 的新手,所以我对此知之甚少。所以场景是我想设置一个特定的时区,用户可以使用应用程序的设置更改该时区。我想要的是当用户更改所述时区时,它应该反映在整个应用程序中。是的,我可以在每个“DateFormatter”中设置时区,但我不想每次创建 DateFormatter 时都编写它。
有没有办法让我创建 DateFormatter 的实例时,时区已经设置为用户选择的时区?是否可以使用 DateFormatter 的扩展来做到这一点?
【问题讨论】:
【参考方案1】:您可以做的是扩展Date
,因为您正在将此TimeZone
设置为DateFormatter
以形成您的日期,因此请为Date
和一个String
设置两个扩展名。
extension Date
struct CustomDateFormatter
static var currentTimeZone = TimeZone.current //Set default timeZone that you want
static func dateFormatter(withFormat format: String) -> DateFormatter
let formatter = DateFormatter()
formatter.timeZone = CustomDateFormatter.currentTimeZone
formatter.dateFormat = format
return formatter
func toDateString(withFormat format: String) -> String
return CustomDateFormatter.dateFormatter(withFormat: format).string(from: self)
extension String
func toDate(withFormat format: String) -> Date?
return Date.CustomDateFormatter.dateFormatter(withFormat: format).date(from: self)
现在,当您需要设置 TimeZone
或想要将 Date
转换为 String
或反之亦然时,请像这样使用此扩展。
//Set timezone
Date.CustomDateFormatter.currentTimeZone = TimeZone(abbreviation: "GMT")!
//get date from String
let date = "31-05-2017 07:30:05".toDate(withFormat: "dd-MM-yyyy HH:mm:ss")
//get string from date with specific format
let dateString = Date().toDateString(withFormat: "dd-MM-yyyy HH:mm:ss")
【讨论】:
@SquareBox 欢迎朋友 :)以上是关于为 DateFormatter 设置全局时区的主要内容,如果未能解决你的问题,请参考以下文章