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




