Проблема с 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 требуется в течение миллисекунд.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]