CEST 时间格式为 HH:mm



我尝试在我的 Swift4 代码中获取 CEST 时区的实际时间

,格式如下

"HH:mm" // needed in CEST TimeZone (CEST = Central European Summer Time)

在尝试这样做时,我观察到两种奇怪的行为(请参阅下面的代码...(:

1.( 当时区标识符设置为 CEST --> 时,收到的 HH:mm 是完全错误的(并且采用 UTC 而不是预期的 CEST 时区(

2.( 当时区标识符设置为"CET"(而不是 CEST(时 --> 那么一切正常!(即接收到的 HH:mm 时间是正确的 CEST 时间(令人惊讶的是 - 它不在预期的 CET 时区中,而是在 CEST 时区(

我在测试期间设置的 iPhone 时区设置为 PDT (= UTC-7(...但其他时区也确实显示了观察到的奇怪行为......

这是我的代码(请参阅 CEST 与 CET 设置(

let currentDate = Date()
let timeNowInCEST = currentDate.CurrentDate_to_CEST_timeOnlyString

在日期和字符串上使用以下扩展名:

extension Date {
    struct Formatter {
        static let CEST_TimeOnly_Formatter: DateFormatter = {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "HH:mm"
            // ******** here I set the CEST or CET timezone
            // setting it to CEST delivers UTC
            // setting it to CET delivers CEST
            // (both are wrong - why is this strange behaviour ?????????????????)
            // **************************************************
            // dateFormatter.timeZone = TimeZone(identifier: "CEST")
            dateFormatter.timeZone = TimeZone(identifier: "CET")
            return dateFormatter
        }()
    }
    var CurrentDate_to_CEST_timeOnlyString: String {
        let CurrentDateString = Formatter.localFormatter.string(from: self)
        let CEST_Date = CurrentDateString.dateFromLocal
        let CEST_DateString = Formatter.CEST_TimeOnly_Formatter.string(from: CEST_Date!)
        return CEST_DateString
    }
}
extension String {
    struct Formatter {
        static let localFormatter: DateFormatter = {
            let dateFormatter = DateFormatter()
            dateFormatter.timeZone = TimeZone.current
            dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
            return dateFormatter
        }()
    }
    var dateFromLocal: Date? {
        return Formatter.localFormatter.date(from: self)
    }
}

我已经更新了你的代码。请看一看:

extension Date {
    static let CEST_TimeOnly_Formatter: DateFormatter = {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        dateFormatter.timeZone = TimeZone(identifier: "CET")
        return dateFormatter
    }()
    var CurrentDate_to_CEST_timeOnlyString: String {
        let CEST_DateString = Date.CEST_TimeOnly_Formatter.string(from: self)
        return CEST_DateString
    }
}

根据区域获取时间:

let currentDate = Date()
let timeNowInCEST = currentDate.CurrentDate_to_CEST_timeOnlyString

最新更新