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

时间:2015-07-15 14:11:45

标签: 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);
}

2 个答案:

答案 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");

以你的榜样为我工作。这种方式不能替代您的原生语言环境。