Russian Qt Forum
Ноябрь 24, 2024, 06:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]QDateTime::secsTo  (Прочитано 7799 раз)
Larry
Гость
« : Март 14, 2016, 15:30 »

Добрый день.
Мне необходимо вычислить кол-во секунд между двумя датами.
Одна формируется из строки (данные с сервера), а вторая текущее время. Но первая дата в UTC, поэтому текущее время конвертирую тоже в UTC и при вычислении разницы через secsTo получаю разницу в два часа, хотя если вывести обе даты, то видно, что обе в UTC. Почему так происходит? Может кто-то сталкивался?

Код:
status.datetime = QDateTime(QDate::fromString(carListData[7], "ddMMyy"), QTime::fromString(carListData[1], "hhmmss"));
status.datetime.setDate(QDate(status.datetime.date().year() + 100, status.datetime.date().month(), status.datetime.date().day()));

QDateTime cur_dt(QDateTime::currentDateTime().toUTC());
int period = status.datetime.secsTo(cur_dt);

if(period > 900)
      status.communication = false;
else
      status.communication = true;
« Последнее редактирование: Март 14, 2016, 19:00 от Larry » Записан
Bepec
Гость
« Ответ #1 : Март 14, 2016, 16:12 »

А вы приведите строку с сервера. Потому что непонятна ваша проблема.
Толи у вас разница в 2 часа возникает между двумя равнозначными датами, то ли у вас ещё что-то.

PS как вариант часовой пояс разный. И передавать надо не дату тогда, а именно utc время, в количестве секунд.
Записан
popper
Гость
« Ответ #2 : Март 14, 2016, 17:47 »

В первой строке приведенного кода конструктор вернет объект даты/времени в локальном часовом поясе, установленном в системе. Чтобы значение было в UTC, нужно конструктор вызывать с третьим параметром Qt::UTC.

http://doc.qt.io/qt-5/qdatetime.html#QDateTime-2.

хотя если вывести обе даты, то видно, что обе в UTC.

А каким образом осуществляется вывод?

PS. В Qt 4.7+ текущее время в UTC можно сразу получать вызовом
Код
C++ (Qt)
currentDateTimeUtc()
 
Записан
Larry
Гость
« Ответ #3 : Март 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 часа.
Записан
Larry
Гость
« Ответ #4 : Март 14, 2016, 17:55 »

Вывод осуществлялся в консоль .toString().
Записан
Larry
Гость
« Ответ #5 : Март 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, а расчет идет так, буд-то текущее время локальное...
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Март 14, 2016, 18:36 »

Посмотрите на конструктор, с помощью которого вы создаете дату от сервера (т.е. UTC):
Код
C++ (Qt)
QDateTime(const QDate & date, const QTime & time, Qt::TimeSpec spec = Qt::LocalTime)

Вас ничего не смущает?
Записан
Larry
Гость
« Ответ #7 : Март 14, 2016, 18:59 »

Вот теперь смутило Смеющийся
Недосмотрел...теперь заработало...Большое СПАСИБО!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.