swift - 格式为 HH :mm 的 CEST 时间

标签 swift date timezone dateformatter

我尝试以下列格式在我的 Swift4 代码中获取 CEST 时区的实际时间

"HH:mm"//在 CEST 时区(CEST = 中欧夏令时)中需要

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

1.) 当 TimeZone-identifier 设置为 CEST 时 --> 那么接收到的 HH:mm 是完全错误的(而且是 UTC 而不是预期的 CEST 时区)

2.) 当 TimeZone-Identifier 设置为“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
    }
}

For getting time according to zone:

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

关于swift - 格式为 HH :mm 的 CEST 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880570/

相关文章:

ios - 如何快速将分钟添加到当前时间

ios - 无法从内存堆栈中释放手势识别器

java - 尝试使用日期方法时出现日期异常

java - ZoneId ID 的本地化名称

javascript - 存储日期,就好像它们是在特定时区输入的一样

ios - reloadData 之后未调用 cellForRowAtIndexPath 但 numberOfRowsInSection 调用

ios - 仅水平滚动图像的登录页面

javascript - 如何在 javascript 中获取此日期格式

php - 如何区分 mysql 时间戳和 php 当前时间?

java - Java 中的时区验证