ios - (12 或 24)如果区域在设备中更改,时间格式将忽略 24 小时时间开关
问题描述
我在设备上打开了 24 小时时间开关,并针对不同的时区测试 iOS 应用程序,这为我提供了正确的时间格式。
前任:
- 23:00 PDT 如果 24 小时制打开
- 如果 24 小时制关闭,则为太平洋夏令时间晚上 11 点
但是,如果我将设备中的地区更改为日本或法国的任何时区。我观察到时间格式忽略了 24 小时制开关并始终显示 12 小时制。然而,如果该地区设置为美国或印度,我会看到正确的结果。
func formattedCloseTime(for date: DateTimeZone) -> String {
let formatter = dateProvider.formatter
formatter.timeZone = date.timeZone
formatter.locale = .autoupdatingCurrent
let stopTimeMinutes = dateProvider.minutesOfDay(from: date.value, timeZone: date.timeZone)
// formatter.dateFormat = stopTimeMinutes == 0
// ? Constants.DateFormat.hourFormat
// : Constants.DateFormat.hourMinuteFormat
formatter.setLocalizedDateFormatFromTemplate(stopTimeMinutes == 0
? Constants.DateFormat.hourFormat
: Constants.DateFormat.hourMinuteFormat)
return formatter.string(from: date.value)
}
我很惊讶为什么它只发生在少数几个地区。地区和时间格式之间有什么关系吗?我该如何解决这个案子?
注意:我不想将时间格式固定为仅 24 小时。我希望它采用用户的设备设置。
解决方案 setLocalizedDateFormatFromTemplate 的 Apple API 看起来并不适用于所有区域。因此,我考虑采用用户设置的 24 小时开关值并相应地显示格式。您可以查看此内容以获取用户设置的 24 小时值。
var isTwentyFourHourTimeSet: Bool {
let formatString = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
return !formatString.contains("a")
}
解决方案
您可以通过声明在 24 小时内锁定日期格式
formatter.dateFormat = "HH:mm"
推荐阅读
- google-bigquery - Bigquery LegacySQL 使用特殊装饰器及时的无效快照@0
- javascript - 多个成员变量
- php - 如何保留我在 CodeIgniter 站点中通过 wordpress 身份验证设置的 $_SESSION 数据?
- sql-server - 是否可以同时使用实体框架和数据库项目?
- angular - 如何让货币管道仅使用国家代码?
- css - Bootstrap 网格一整列和 2 个堆叠列
- c# - 按资产文件夹统一中的日期排序
- reactjs - 一个 Textfiled 不使用道具上的功能
- python - Tkinter 窗口直到循环完成后才更新
- azure - .NET Core 中的 Kustos 连接字符串问题