1

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

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

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

4

2 回答 2

0

我在 QT 上开了一个案例,得到的回应是:

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

这不是错误,它需要点。

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

于 2014-06-09T15:06:28.543 回答
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。例如“jun”。ES 和 DE 的“Juni”。这没有任何意义。在德国,“Juni”的简称是“Jun”。对于西班牙,我不知道。这是一个错误。

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

于 2014-06-06T23:48:19.227 回答