如何从 QDatetime 获取不同语言的日期名称?

Man*_*ooo 3 c++ qt locale datetime-format

QDateTime date = QDateTime::currentDateTime();
QString week = QDate::shortDayName(date.date().dayOfWeek());

painter.drawText(-30, 20, 65, 40, Qt::AlignHCenter, week);
Run Code Online (Sandbox Code Playgroud)

我正在 Qt Creator 中绘制时钟。我的 Qt 版本是 5.8.0。我的系统语言是中文,所以星期是中文显示的。是关于 Locale 的吗?如何用英文显示星期?

Ily*_*lya 5

是的,如果您需要基于另一个语言环境(不是默认语言环境)生成字符串,则需要使用语言环境对象指定它。尝试这样的事情:

QLocale locale(QLocale("en_US"));
QDateTime date = QDateTime::currentDateTime();
QString dateString = locale.toString(date);
Run Code Online (Sandbox Code Playgroud)

如果您只需要完整日期的一部分(一周中的某天或类似日期),您可以设置格式:

QString dateString = locale.toString(date, "dddd, d MMMM yyyy");
Run Code Online (Sandbox Code Playgroud)


Tob*_*ght 4

对象QLocale可以使用QLocale::toString()接受QDate或 的方法来格式化日期和时间QDateTime

\n\n

演示:

\n\n
#include <QDate>\n#include <QDebug>\n#include <QLocale>\n\nint main()\n{\n    const QDate date{ 2017, 5, 5 };\n    const QLocale locales[]{ QLocale::English, QLocale::Chinese, QLocale::Finnish };\n\n    for (auto const& l: locales)\n        qDebug() << qPrintable(QString("In %0: %1 is %2")\n            .arg(l.nativeLanguageName(),\n                 l.toString(date, QLocale::ShortFormat),\n                 l.toString(date, "dddd")));\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出

\n\n
\n

在美式英语中: 5/5/17 是星期五
\n 在 \xe7\xae\x80\xe4\xbd\x93\xe4\xb8\xad\xe6\x96\x87 中: 2017/5/5 是 \xe6\x98\ x9f\xe6\x9c\x9f\xe4\xba\x94
\n 在 suomi 中:5.5.2017 是 perjantaina

\n
\n\n
\n\n

简短回答

\n\n

你可以写

\n\n
QString week = QLocale{QLocale::English}.toString(date, "dddd");\n
Run Code Online (Sandbox Code Playgroud)\n\n

(虽然我不会这么称呼它week- 这让我期待一年内的周数)。

\n