我想格式化一个时间显示,以符合当前的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)
}