Qt QDateTime toString("h:m:s ap") ap/a/AP/a 缺失

KcF*_*nMi 5 qt

我注意到在将日期转换为字符串时缺少“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);
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*iki 6

这取决于您的区域设置。并非每个区域设置都支持 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"
Run Code Online (Sandbox Code Playgroud)