QLocale toDate总是在" es"上返回无效的QDate。现场

时间:2014-06-06 22:53:40

标签: c++ qt qt5 qdate qlocale

为什么此代码返回无效日期?

QLocale locale("es");
QDate date = locale.toDate("1-Jun-14", "d-MMM-yy");

如果调试locale变量,它会正确初始化为locale es_ES,但不会返回日期,date.isValid()会返回false。

2 个答案:

答案 0 :(得分:0)

我不知道为什么,但你必须在月份之后加上.(简短版本)。 我尝试了以下代码:

QLocale locale("es");
qDebug() << locale.standaloneMonthName(6, QLocale::ShortFormat);
QDate date = locale.toDate("01-Jun.-14", "dd-MMM-yy");
qDebug() << date;

输出令人惊讶:

"Jun."
QDate("1914-06-01")

锁定就像一个错误给我,如果我尝试使用它与德国语言。

更新:好的,我明白了。这非常令人困惑。您必须使用locale.monthName给出的简称。这是例如&#34;君&#34。对于ES和&#34; Juni&#34;对于DE。这没有任何意义。在德国,简称&#34; Juni&#34;是&#34; Jun&#34;。对于西班牙我不知道。这是一个错误。

更新2 :我想我了解系统(至少对于德语区域设置)。如果全名大于4个字符(例如&#34; Januar&#34;),则短版本是真正的简短形式(&#34; Jan&#34;),附加一个点(&#34; Jan.& #34)。如果全名短于4个字符,则短格式与长格式完全相同(例如&#34; Mai&#34;)。但我不明白为什么要附加一个点,因为对于EN语言环境,不会附加点。

答案 1 :(得分:0)

我在QT上开了一个案例,答案就是:

西班牙语的Unicode CLDR数据在月份名称后面有一个点。

这不是一个错误,它需要点。

更多详情:https://bugreports.qt-project.org/browse/QTBUG-39519