How do I construct an ISO 8601 datetime in C++?

前端 未结 9 1244
小蘑菇
小蘑菇 2020-12-05 01:51

I\'m working with the Azure REST API and they are using this to create the request body for table storage:

DateTime.UtcNow.ToString(\"o\")

9条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-05 02:21

    OK so I've modified a few solutions that I've found as came up with the following :

    static QString getTimeZoneOffset()
    {
        QDateTime dt1 = QDateTime::currentDateTime();
        QDateTime dt2 = dt1.toUTC();
        dt1.setTimeSpec(Qt::UTC);
    
    int offset = dt2.secsTo(dt1) / 3600;
    if (offset >= 0)
        return QString("%1").arg(offset).rightJustified(2, '0',true).prepend("+");
    return QString("%1").arg(offset).rightJustified(2, '0',true);
    }
    

    Then to easily format a date ( yyyy-MM-dd'T'HH:mm:ss.SSSZ ) :

    static QString toISO8601ExtendedFormat(QDateTime date)
    {
        QString dateAsString = date.toString(Qt::ISODate);
        QString timeOffset =  Define::getTimeZoneOffset();
        qDebug() << "dateAsString :" << dateAsString;
        qDebug() << "timeOffset :" << timeOffset;
        timeOffset = QString(".000%1%2").arg(timeOffset).arg("00");
        qDebug() << "timeOffset replaced :" << timeOffset;
        if(dateAsString.contains("Z",Qt::CaseInsensitive))
            dateAsString = dateAsString.replace("Z",timeOffset);
        else
            dateAsString = dateAsString.append(timeOffset);
            qDebug() << "dateAsString :" << dateAsString;
        return dateAsString;
    }
    

    For example GMT +2 would look like this : 2013-10-14T00:00:00.000+0200

提交回复
热议问题