Проблема с QDateTime::fromMSecsSinceEpoch

Я пытаюсь прочитать секунды после 1970 года в QDateTime. Т.е.: startT = 1.390309552938E9

Для этого я использую:

QDateTime time = QDateTime::fromMSecsSinceEpoch(startT*1000); // *1000 because a have seconds while qt expecting milliseconds

Теперь я хочу сравнить это с другим разом, когда я получаю QDateTime::toString:

QDate startDate = QDate::fromString(datestr, "yyyyMMdd");
QTime time = QTime::fromString(timestr, "hhmmss");
QDateTime datetime = QDateTime(date, time, Qt::UTC);

например, datestr и timestr выглядят так: "20140121" и "130358"

Я хочу сравнить, если time а также datetime равны (секундам, за исключением миллисекунд), поэтому я использую что-то вроде этого:

if (time < datetime)

но это не работает?! Может ли кто-нибудь помочь мне здесь?

Спасибо!

редактировать:

Я делаю:

QDateTime time = QDateTime::fromMSecsSinceEpoch(startT*1000);

затем я возвращаю эту информацию (время) вместе с:

void Data::setTime(const QDateTime& obTime)
{
    time = QDateTime(obTime);
}

где obTime мои времена

позже в коде я возвращаю свое значение:

QDateTime time = newData.getTime();

любой getTime это:

QDateTime MetObs::getTime() const
{
    return time;
}

Получение даты и времени совпадает с указанным выше. Нет никаких сложностей с двумя определениями "времени", потому что оно находится на другой позиции Программы

И чем я пытаюсь воспользоваться:

if (time < datetime)

Другая информация:

когда я печатаю значения в виде строк с:

QString timestring = time.toString(Qt::ISODate);
QString datetimestring = datetime.toString(Qt::ISODate);
cout << timestring.toAscii().data() << endl;
cout << datetimestring.toAscii().data() << endl;

это выходит:

2014-01-21T13:03:59
2014-01-21T13:03:58Z

1 ответ

Сравните как это:

time.toTime_t() == datetime.toTime_t()

Метод возвращает секунды с начала эпохи.

Примечание 1: почему вы использовали < если вы хотите проверить на равенство?

Примечание 2: Вы не должны хранить значения времени в двойном порядке - это может привести к потере точности. uint32_t хорош в течение нескольких секунд, а uint64_t требуется в течение миллисекунд.

Другие вопросы по тегам