You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于应用在Windows 10与Ubuntu发行版Zorin OS上时间AM/PM格式显示差异及QLocale设置无效的技术咨询(需西班牙语环境下将A. M./P. M.改为AM/PM)

解决西语系统下Qt应用时间显示A. M./P. M.改为AM/PM的问题

我之前也碰到过类似跨系统时间格式不一致的坑,结合你提到的Qt开发场景,给你几个针对性的解决方案:

方案1:强制自定义时间格式(最直接)

如果你的应用需要固定显示AM/PM格式,不管系统locale是什么,直接在格式化时间时指定格式字符串就行。Qt的toString()方法支持用AP格式符来输出不带点的AM/PM:

QDateTime currentTime = QDateTime::currentDateTime();
// 这里的格式可以根据你的需求调整,比如加上日期:"yyyy-MM-dd hh:mm AP"
QString formattedTime = currentTime.toString("hh:mm AP");

这样不管是Windows还是Zorin OS的西语环境,都会输出09:45 AM或者02:30 PM这种格式,完全不受系统locale影响。

方案2:修改西语Locale的时间格式(保留西语日期风格)

如果想保留西语的日期、时间其他部分的显示风格,只把A. M./P. M.改成AM/PM,可以先获取当前的西语Locale,然后修改它的时间格式模板:

// 获取系统当前的西语Locale(或者直接指定QLocale::Spanish)
QLocale esLocale = QLocale::system();
// 获取短时间格式模板
QString timeTemplate = esLocale.timeFormat(QLocale::ShortFormat);
// 替换掉带点的AM/PM文本
timeTemplate.replace("A. M.", "AM").replace("P. M.", "PM");
// 用修改后的模板格式化时间
QString formattedTime = esLocale.toString(QDateTime::currentDateTime(), timeTemplate);

这个方法既保留了西语环境下的日期、时间分隔符等本地化风格,只调整了AM/PM的显示方式。

方案3:系统层面调整Locale(影响全局)

如果希望整个Zorin OS系统的时间都显示AM/PM,可以修改系统的Locale配置:

  1. 打开终端,编辑/etc/locale.conf文件:
sudo nano /etc/locale.conf
  1. 添加或修改LC_TIME配置为英文时间格式:
LC_TIME=en_US.UTF-8
  1. 保存后重启系统生效。不过这个方法会让系统所有应用的时间格式都变成英文风格,适合需要全局调整的场景,但可能不符合你“西语系统环境”的需求,所以优先推荐前两个应用内的解决方案。

内容的提问来源于stack exchange,提问作者Cattivellio

火山引擎 最新活动