Название: [РЕШЕНО]QDateTime::secsTo Отправлено: Larry от Марта 14, 2016, 15:30 Добрый день.
Мне необходимо вычислить кол-во секунд между двумя датами. Одна формируется из строки (данные с сервера), а вторая текущее время. Но первая дата в UTC, поэтому текущее время конвертирую тоже в UTC и при вычислении разницы через secsTo получаю разницу в два часа, хотя если вывести обе даты, то видно, что обе в UTC. Почему так происходит? Может кто-то сталкивался? Код: status.datetime = QDateTime(QDate::fromString(carListData[7], "ddMMyy"), QTime::fromString(carListData[1], "hhmmss")); Название: Re: QDateTime::secsTo Отправлено: Bepec от Марта 14, 2016, 16:12 А вы приведите строку с сервера. Потому что непонятна ваша проблема.
Толи у вас разница в 2 часа возникает между двумя равнозначными датами, то ли у вас ещё что-то. PS как вариант часовой пояс разный. И передавать надо не дату тогда, а именно utc время, в количестве секунд. Название: Re: QDateTime::secsTo Отправлено: popper от Марта 14, 2016, 17:47 В первой строке приведенного кода конструктор вернет объект даты/времени в локальном часовом поясе, установленном в системе. Чтобы значение было в UTC, нужно конструктор вызывать с третьим параметром Qt::UTC.
http://doc.qt.io/qt-5/qdatetime.html#QDateTime-2. хотя если вывести обе даты, то видно, что обе в UTC. А каким образом осуществляется вывод? PS. В Qt 4.7+ текущее время в UTC можно сразу получать вызовом Код
Название: Re: QDateTime::secsTo Отправлено: Larry от Марта 14, 2016, 17:54 Извините, не мог ответить, т.к. не был на месте.
Вот приходят данные с сервера в таком виде: $#GPS00000,145034,4903.1404,N,2526.9433,E,0,140316,0 ,0,A=0,B=0,SAT=f,T102=b3,T112=0,T240=0,T6=0,T66=2ed4,T67=10a4,ioEVT=0^ Текущее время (Украина +2 часа): 16:50, т.е. разница 2 часа. Название: Re: QDateTime::secsTo Отправлено: Larry от Марта 14, 2016, 17:55 Вывод осуществлялся в консоль .toString().
Название: Re: QDateTime::secsTo Отправлено: Larry от Марта 14, 2016, 18:04 Вот вывод осуществляется, если привести текущее время в UTC:
datetime in point: "14.03.16 - 14:59:55" , current datetime: "14.03.16 - 14:59:54" Здесь как раз выводит все нормально, т.е. текущее время преобразовано в UTC, вот что получается при определении периода: Код: int period = status.datetime.secsTo(cur_dt); period: 7199 Вот и не могу понять, как он считает, если дату текущую преобразовал в UTC, а расчет идет так, буд-то текущее время локальное... Название: Re: QDateTime::secsTo Отправлено: Old от Марта 14, 2016, 18:36 Посмотрите на конструктор, с помощью которого вы создаете дату от сервера (т.е. UTC):
Код
Вас ничего не смущает? Название: Re: QDateTime::secsTo Отправлено: Larry от Марта 14, 2016, 18:59 Вот теперь смутило ;D
Недосмотрел...теперь заработало...Большое СПАСИБО! |