我正在尝试使用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)!
寻找解决方案
答案 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中使用NSDate
,NSLocale
,NSTimeZone
等。使用原生结构。