如何以其他语言从QDatetime获取日期名称?

时间:2017-05-05 12:19:37

标签: 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);

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

QLocale对象可以使用接受QLocale::toString()QDate的{​​{1}}方法格式化日期和时间。

演示:

QDateTime

输出

  

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

简短回答

你可以写

#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")));
}

(虽然我不会称之为QString week = QLocale{QLocale::English}.toString(date, "dddd"); - 这让我期待一年中的​​周数。)