Qt QDateTime наносекунды с 01.01.1970

Я собираюсь прочитать данные из файла, в котором хранится время в наносекундах с 1 января 1970 года. Моя проблема в том, что я хочу прочитать его в объект QDateTime, но он просто не работает так, как я хочу, и документация Qt мне тоже не помогла.

Примечание: для моих целей достаточно миллисекундного растра. Вот мой текущий подход:

void setDateTime(qint64 &ns)
{
    _datetime.setDate(QDate(1970,1,1));
    _datetime.setTime(QTime(0,0,0,0));
    ns /= 1000; //ns are now ms
    qDebug() << "| ms = " << ns;
    qDebug() << "| days = " << static_cast<int>(ns%(60*60*24*1E6));
    _datetime.addDays( static_cast<int>(ns%(60*60*24*1000)) );
    _datetime.addMSecs( ns - ((ns/(60*60*24*1000))*60*60*24*1E6) );
    qDebug() << "| dt = " << _datetime;
}

результат всегда

 | dt =  QDateTime("Thu Jan 1 00:00:00 1970") 

что конечно неправильно

Кто-нибудь может сказать, где мой недостаток? Спасибо за любые советы и помощь.

Редактировать: setTime_t, очевидно, то, что я хотел (за исключением разрешения в миллисекундах), и это работает, как и ожидалось, но мне действительно любопытно, почему описанный выше подход не работает.

Редактировать измененную ошибку взлома с мультипликативной 1E6 на 1E6


person drahnr    schedule 30.06.2010    source источник
comment
Обратите внимание, что 1000 нс — это 1 мкс (микросекунда), а методы QDateTime используют миллисекунды. Поэтому вам, вероятно, следует разделить ns на 1000000 вместо od 1000.   -  person chalup    schedule 01.07.2010
comment
Вы правы, но это было исправлено в моем коде, просто забыл изменить в том хаке   -  person drahnr    schedule 02.07.2010


Ответы (1)


QDateTime::addDays() и QDateTime::addMSecs() — константные функции, возвращающие новый QDateTime. Вы просто отбрасываете возвращаемое значение.

И да, это написано в документации.

person gnud    schedule 30.06.2010
comment
большое спасибо, я просто вчера устал... глупый фейл :› - person drahnr; 01.07.2010