我如何以不同的语言从qdatetime获取日名

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

本文关键字:qdatetime 获取 取日 语言      更新时间:2023-10-16
QDateTime date = QDateTime::currentDateTime();
QString week = QDate::shortDayName(date.date().dayOfWeek());
painter.drawText(-30, 20, 65, 40, Qt::AlignHCenter, week);

我在QT创建者中画一个时钟。我的QT版本是5.8.0。我系统的语言是中文的,因此本周以中文展示。是关于语言环境的吗?我该如何用英语展示一周?

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

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

如果您只需要一个全约日期的一部分(一周的一天或类似的东西(,则可以设置格式:

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

QLocale对象可以使用接受 QDateQDateTimeQLocale::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")));
}

输出

美国英语:5/5/17是星期五
在简体:2017/5/5是
在suomi:5.5.2017是perjantaina


简短答案

您可以写

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

(尽管我不会称其为 week-这使我期望一年中的一周号(。