【发布时间】:2021-12-13 06:26:36
【问题描述】:
我在设备上打开了 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")
}
【问题讨论】:
标签: ios swift localization datetime-format time-format