From 0ad50d323d026bd2174070d7ff223113ddbe6543 Mon Sep 17 00:00:00 2001 From: shuttle slave Date: Mon, 14 Sep 2026 19:06:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(datetime):=20show=20"=E5=87=8C=E6=99=A8"=20?= =?UTF-8?q?instead=20of=20"=E4=B8=8A=E5=8D=88"=20for=20midnight=20hour=20i?= =?UTF-8?q?n=2012-hour=20format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Qt's QLocale AM/PM dichotomy marks hour 0 (00:00-00:59) as "上午" (AM) in Chinese locale under 12-hour format, displaying "上午 12:01" which is misleading since "上午" conventionally refers to 6:00-12:00 in Chinese. Replace "上午" with "凌晨" when the current hour is 0 in 12-hour format. Fixes: PMS BUG-278365 --- plugins/dde-dock/datetime/datetimewidget.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/dde-dock/datetime/datetimewidget.cpp b/plugins/dde-dock/datetime/datetimewidget.cpp index 04271a7cc..317c5ce18 100644 --- a/plugins/dde-dock/datetime/datetimewidget.cpp +++ b/plugins/dde-dock/datetime/datetimewidget.cpp @@ -144,12 +144,18 @@ void DatetimeWidget::updateDateTimeString() m_dateTime = locale.toString(QDateTime::currentDateTime(), longDateFormat + " " + m_regionFormat->getLongTimeFormat()); QDateTime current = QDateTime::currentDateTime(); + // 12 小时制下,0:00-0:59 时 Qt 将时段标记为"上午",与中文"凌晨"习惯不符,替换为"凌晨" + const bool isMidnightHour = !m_24HourFormat && current.time().hour() == 0; + if (isMidnightHour) + m_dateTime.replace(QStringLiteral("上午"), QStringLiteral("凌晨")); const auto position = qApp->property(PROP_POSITION).value(); QString timeStr, dateString; if (position == Dock::Bottom || position == Dock::Top) { QString timeFormat = m_regionFormat->getShortTimeFormat(); timeStr = locale.toString(current, timeFormat); + if (isMidnightHour) + timeStr.replace(QStringLiteral("上午"), QStringLiteral("凌晨")); dateString = locale.toString(current.date(), m_regionFormat->getShortDateFormat()); m_timeLabel->setText(timeStr); @@ -157,6 +163,8 @@ void DatetimeWidget::updateDateTimeString() } else { if (!m_24HourFormat) { QString apText = locale.toString(current, "AP"); + if (isMidnightHour) + apText.replace(QStringLiteral("上午"), QStringLiteral("凌晨")); m_apLabel->setText(apText); QString timeFormat = m_regionFormat->getShortTimeFormat();