我注意到" 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);
}
答案 0 :(得分:2)
这取决于您的语言环境。并非每个语言环境都支持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"
答案 1 :(得分:0)
并非所有语言环境都支持此QDateTime
输出格式。
对于结果,您需要创建具有参数区域设置(语言,国家/地区)的变量QLocale
,它支持它。例如:
QLocale eng(QLocale::English, QLocale::UnitedStates);
然后你可以使用QLocale::toString()
方法选择这样的语言环境:
qDebug() << eng.toString(datetime, "yyyy MMMM dd@HH.mm.ss zzz ap");
以你的榜样为我工作。这种方式不能替代您的原生语言环境。