DateFormatter“HH”没有在swift中以24小时格式给出时间

时间:2018-02-12 18:52:45

标签: ios iphone swift datetime nsdateformatter

我正在尝试使用UTC时区以24小时格式获取currentTime。 当我在不同的设备上调试我的应用程序时,我遇到了一个奇怪的问题。

代码在我的设备中运行得非常好,但是在我的表兄的iPhone 11.2中,它以12小时格式提供时间。所以我尝试在另一个设备上运行app,这个设备是同一个操作系统的iPhone X.

我不确定出了什么问题但是我在其他一些设备上尝试了这个,并且应用程序在所有其他设备上运行良好。 附:我的应用程序的旧版本在表兄的手机中使用相同的代码运行良好。

这是我用来获取currentTime的代码。

        let dateFormatter = DateFormatter()
        dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone!
        dateFormatter.dateFormat = "EEEE"
        dayOfWeekString = dateFormatter.string(from: NSDate() as Date)

        dateFormatter.dateFormat = "HH"
        let CurrentTime = dateFormatter.string(from: NSDate() as Date)
        let CHour = Int(CurrentTime)!

寻找解决方案

1 个答案:

答案 0 :(得分:2)

DateFormatter也会考虑当前的区域设置。

建议将区域设置设置为固定值

let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")!
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "HH"
let currentTime = dateFormatter.string(from: Date())

然而,使用Calendar有一种更可靠的方法。无论如何,hour日期组件都处于24小时模式,您不需要转换为Int

var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(abbreviation: "UTC")!
let currentHour = calendar.component(.hour, from: Date())

注意:不要在Swift中使用NSDateNSLocaleNSTimeZone等。使用原生结构。