我注意到在将日期转换为字符串时缺少"ap/a/AP/a“。"h:m:s ap“,即我得到"11:5:42”。对于每个"ap/a/AP/a“表单,也会发生同样的情况。
我错过了什么?
void DecoderBr1::recordOnFile(QDateTime dateTime, QByteArray ba)
{
QString filename(dateTime.toString("yyyy MMMM dd@HH.mm.ss zzz ap"));
filename.append(".log");
Recorder recorder;
recorder.recordFile(filename, ba);
}发布于 2015-07-15 14:42:30
这取决于你所在的地区。并不是每个地区都支持AM/PM格式。例如,我的默认区域设置为"it_IT“,不打印"AM/PM”。相反,设置另一个区域设置(例如"en_EN")会像预期的那样工作。
QDateTime t = QDateTime::fromString("2015-07-16T19:20:30+01:00", Qt::ISODate);
QString st = t.toString("yyyy MMMM dd@HH.mm.ss zzz ap");
QString locale_st_HH = QLocale("en_EN").toString(t, "yyyy MMMM dd@HH.mm.ss zzz ap");
QString locale_st_hh = QLocale("en_EN").toString(t, "yyyy MMMM dd@hh.mm.ss zzz ap");
qDebug() << st;
// With italian locale does not print AM/PM
// "2015 luglio 16@19.20.30 000 "
qDebug() << locale_st_HH;
// With en_EN locale it works
//"2015 July 16@19.20.30 000 pm"
qDebug() << locale_st_hh;
// With en_EN locale it works
// With hh it prints 07 pm instead of 19 pm // Credits to @t3ft3l--i
//"2015 July 16@07.20.30 000 pm"发布于 2015-07-15 15:04:02
并非所有地区都支持这种格式的QDateTime输出。
对于结果,您需要创建带有支持它的参数locale(语言、国家)的变量QLocale。例如:
QLocale eng(QLocale::English, QLocale::UnitedStates);然后,您可以在选定的区域设置中使用QLocale::toString()方法,如下所示:
qDebug() << eng.toString(datetime, "yyyy MMMM dd@HH.mm.ss zzz ap");你的例子对我很有帮助。这样就不能取代你的本土环境。
https://stackoverflow.com/questions/31432845
复制相似问题