为 DateFormatter 设置全局时区

Set global TimeZone for DateFormatter

我在 SO 中进行了搜索,但找不到有用的线程来完成我想要的。我是 Swift 的新手,所以我对此了解不多。所以场景是我想设置一个特定的时区,用户可以使用应用程序的设置更改该时区。我想要的是当用户更改所述时区时,它应该反映在整个应用程序中。是的,我可以在每个 "DateFormatter" 中设置时区,但我不想每次创建 DateFormatter 时都写它。

有没有办法在我创建 DateFormatter 实例时将时区设置为用户选择的时区?是否可以使用 DateFormatter 的扩展来做到这一点?

你可以做的是将 Date 延期,因为你将此 TimeZone 设置为 DateFormatter 来安排你的约会,所以为 [=12= 做两个延期之一] 和一个 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")