为什么这段代码返回一个无效的日期?
QLocale locale("es");
QDate date = locale.toDate("1-Jun-14", "d-MMM-yy");如果调试语言环境变量,它将被正确地初始化为语言环境es_ES,但不返回日期,而date.isValid()返回false。
发布于 2014-06-07 07:48:19
我不知道为什么,但你必须在月份后面放一个. (简写版本)。我尝试了以下代码:
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")锁对我来说就像一个bug,如果我尝试在德语地区使用它,它就会失败。
更新:好的,我知道了。这很让人困惑。您必须采用locale.monthName提供的缩写名称。这是“jun”的意思。代表ES和"Juni“代表DE。这真的没有任何意义。在德国,"Juni“的简称是"Jun”。对于西班牙,我不知道。这是一个bug。
更新2:我想我理解这个系统(至少对于德语语言环境是这样)。如果全名大于4个字符(例如"Januar")缩写形式是真正的缩写形式("Jan"),后缀一个点("Jan.")。如果全名少于4个字符,则短形式与长形式完全相同(例如"Mai")。但是我不明白为什么要附加一个点,因为对于EN语言环境,没有附加任何点。
发布于 2014-06-09 23:06:29
我在QT上打开了一个案例,得到的响应是:
西班牙语的Unicode CLDR数据在月份名称后有一个点。
这不是一个bug,它需要一个点。
https://stackoverflow.com/questions/24091781
复制相似问题