根据区域设置和用户的 24 小时偏好设置时间格式的最佳方式



我想格式化一个时间显示,以符合当前的Locale和设备用户的24小时时钟偏好。以下是我目前正在做的事情,但我想知道是否有更好的方法。

val time = ZonedDateTime.now()
val formatter = when (DateFormat.is24HourFormat(context)) {
true -> DateTimeFormatter.ofPattern("HH:mm", Locale.getDefault())
false -> DateTimeFormatter.ofPattern("h:mm a", Locale.getDefault())
}
text = time.format(formatter)

除了使用DateFormat(因为该类已经过时(之外,还有什么方法可以获得用户的24小时偏好吗?

有没有更好的方法来创建格式化程序?DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)不尊重用户的24小时偏好。

可能不是最好的解决方案,但这就是我想到的。它应该在12小时和24小时格式之间切换时保留任何特定于区域设置的格式(如@HeysemKatibi的评论中所述(,但我还没有完全测试过。

真的希望DateTimeFormatter尊重用户设置和/或有一个简单的方法告诉它切换到24小时。

fun Context.formatTime(time: TemporalAccessor): String {
var pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(
null,
FormatStyle.SHORT,
IsoChronology.INSTANCE,
Locale.getDefault()
)
if (DateFormat.is24HourFormat(this)) {
pattern = pattern.replace("h", "H")
.replace("a", "").trim()
}
val formatter = DateTimeFormatter.ofPattern(pattern)
return formatter.format(time)
}

最新更新