通知栏时间显示异常
·
概述
在某些系统版本中,设备系统时间设置为 12 小时制,下午 13:00 发起一条通知,通知栏中显示的时间却是 01:00。这是一个时间格式转换的 bug——系统按 24 小时制处理了时间,但没有根据用户的 12 小时制设置做格式化,导致下午 13点被错误地显示为 01 点。
说明
这个问题的根源在于时间格式化时没有读取系统的时间制式配置。HarmonyOS 中获取系统时间格式的接口是date.getSystemTimeConfiguration() ,它返回的is24Hour 字段标识当前是 24 小时制还是 12 小时制。
在生成通知时,如果直接用new Date().getHours()取小时数再拼接显示,拿到的是 24 小时制的原始值(12 点下午 = 12,1 点下午 = 13),不会自动转换。当 is24Hour为 false 时,需要手动将小时数转换为 12 小时制格式,并追加 AM/PM 标识。
使用实践
通知构建时根据系统配置格式化时间:
import { notification } from '@kit.NotificationKit'
function formatNotificationTime(timestamp: number): string {
let date = new Date(timestamp)
let hours = date.getHours()
let minutes = date.getMinutes()
let config = date.getSystemTimeConfiguration()
let period = ''
if (!config.is24Hour) {
period = hours >= 12 ? ' PM' : ' AM'
hours = hours % 12
if (hours === 0) hours = 12
}
let minuteStr = minutes.toString().padStart(2, '0')
let hourStr = hours.toString().padStart(2, '0')
return `${hourStr}:${minuteStr}${period}`
}
调用处把格式化好的时间传给通知:
let timeText = formatNotificationTime(Date.now())
notification.publish({
id: 1,
content: { notificationContentType: 0, normal: { title: '标题', text: `内容 | ${timeText}` } }
})
更多推荐
所有评论(0)