为什么此代码返回无效日期?
QLocale locale("es");
QDate date = locale.toDate("1-Jun-14", "d-MMM-yy");
如果调试 locale 变量,它会正确初始化为 locale es_ES,但不返回日期并date.isValid()
返回 false。
我在 QT 上开了一个案例,得到的回应是:
西班牙语的 Unicode CLDR 数据在月份名称后有一个点。
这不是错误,它需要点。
我不知道为什么,但你必须把.
一个月放在后面(短版)。我尝试了以下代码:
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 语言环境,没有附加点。