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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDateTime и преобразование из UTC  (Прочитано 8094 раз)
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« : Август 04, 2011, 22:27 »

Сколько не гуглю везде нахожу преобразование в UTC ,но никак не обратно. Вообщем наткнулся на странные грабли есть время в формате UTC = 1312416000000 , написал для конвертирования в человеческий формат следующее

Код:
QDateTime date = QDateTime::fromTime_t(1312416000000);
qDebug() << date.toString("dd-MM-yyyy hh:mm");

на что получаю

Код:
01-09-2047 22:18

это не совсем то что я ожидал получить  Улыбающийся Если пользуюсь онлайн конвертером http://www.esqsoft.com/javascript_examples/date-to-epoch.htm то получаю правильную дату 04-08-2011 04:00. Вопрос что я делаю не так при конвертации ? или это фича Qt ?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 04, 2011, 22:46 »

Если пользуюсь онлайн конвертером http://www.esqsoft.com/javascript_examples/date-to-epoch.htm
Не наводит на мысли?
Код
C++ (Qt)
   QDateTime date = QDateTime::fromMSecsSinceEpoch( 1312416000000LL );
   qDebug() << date.toString("dd-MM-yyyy hh:mm:ss.zzz");
Qt 4.7+ only
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Август 04, 2011, 22:54 »

Если нужна более ранняя версия Qt, то вот такой код:
Код
C++ (Qt)
   QDateTime date = QDateTime::fromTime_t( 0 ).addMSecs( 1312416000000LL );
   qDebug() << date.toString("dd-MM-yyyy hh:mm:ss.zzz");
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Август 04, 2011, 23:42 »

понял, осознал Улыбающийся большое спасибо за подсказку  Улыбающийся
Записан
Mish_ka
Гость
« Ответ #4 : Сентябрь 17, 2014, 11:10 »

Всем привет.
Подскажите пожалуйста
Есть дата 12.04.1962, она же -243759600, на PHP работает нормально, пишет читает.

А вот в Qt проблема.

Делаю:

Код
C++ (Qt)
       QString data1 = "-243759600";
       QString data2 = "-243759600LL";
 
       int time_u_1 = data1.toInt();
       int time_u_2 = data2.toInt();
 
       qint64 time_u_64_1 =  data1.toLongLong();
       qint64 time_u_64_2 =  data2.toLongLong();
 
       qDebug() << QDateTime::fromMSecsSinceEpoch(time_u_1).toString("dd.MM.yyyy");
       qDebug() << QDateTime::fromMSecsSinceEpoch(time_u_2).toString("dd.MM.yyyy");
 
       qDebug() << QDateTime::fromMSecsSinceEpoch(time_u_64_1).toString("dd.MM.yyyy");
       qDebug() << QDateTime::fromMSecsSinceEpoch(time_u_64_2).toString("dd.MM.yyyy");
 
       qDebug() << QDateTime::fromMSecsSinceEpoch(-243759600).toString("dd.MM.yyyy");
       qDebug() << QDateTime::fromMSecsSinceEpoch(-243759600LL).toString("dd.MM.yyyy");
 
       qDebug() << QDateTime::fromMSecsSinceEpoch(1312416000000).toString("dd.MM.yyyy");
       qDebug() << QDateTime::fromMSecsSinceEpoch(1312416000000LL).toString("dd.MM.yyyy");
 

Он мне выдаёт:
Код
C++ (Qt)
"29.12.1969"
"01.01.1970"
 
"29.12.1969"
"01.01.1970"
 
"29.12.1969"
"29.12.1969"
 
"04.08.2011"
"04.08.2011"
 
« Последнее редактирование: Сентябрь 17, 2014, 11:12 от Mish_ka » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Сентябрь 17, 2014, 12:17 »

Умножь time_u_1 на 1000.
time_u_2 всегда будет 0, т.к. обломится конвертация строки в число из-за конечных "LL".
Записан

Qt 5.11/4.8.7 (X11/Win)
Mish_ka
Гость
« Ответ #6 : Сентябрь 17, 2014, 12:46 »

Спасибо.

Сделал. Но у меня получилось когда я умножил time_u_64_1 на 1000

А почему именно на 1000, входящие миллисекунды?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Сентябрь 17, 2014, 12:49 »

А почему именно на 1000, входящие миллисекунды?
А что, прочитать описание QDateTime::fromMSecsSinceEpoch() совсем не судьба Непонимающий
Да и само название с "MSecs" разве не говорит Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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