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

How can I obtain day name from QDatetime in a different language?

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

painter.drawText(-30, 20, 65, 40, Qt::AlignHCenter, week);

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

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

QLocale locale(QLocale("en_US"));
QDateTime date = QDateTime::currentDateTime();
QString dateString = locale.toString(date);

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

QString dateString = locale.toString(date, "dddd, d MMMM yyyy");

QLocale 对象可以使用接受 QDateQDateTime.

QLocale::toString() 方法格式化日期和时间

演示:

#include <QDate>
#include <QDebug>
#include <QLocale>

int main()
{
    const QDate date{ 2017, 5, 5 };
    const QLocale locales[]{ QLocale::English, QLocale::Chinese, QLocale::Finnish };

    for (auto const& l: locales)
        qDebug() << qPrintable(QString("In %0: %1 is %2")
            .arg(l.nativeLanguageName(),
                 l.toString(date, QLocale::ShortFormat),
                 l.toString(date, "dddd")));
}

输出

In American English: 5/5/17 is Friday
In 简体中文: 2017/5/5 is 星期五
In suomi: 5.5.2017 is perjantaina


简答

你可以写

QString week = QLocale{QLocale::English}.toString(date, "dddd");

(虽然我不会称它为 week - 这让我期待一年中的​​周数)。