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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки  (Прочитано 6050 раз)
neosapient
Гость
« : Июнь 10, 2010, 12:13 »

Здравствуйте.

Сегодня ночью собрал статическую QT4 без зависимостей от VC (-Mt в соответствии с инструкциями с вики этого сайта).

Попробовал преобразовать время в виде текста к формату time_t. Пришел к выводу, что собранная мной статическая версия не знает свой часовой пояс.

Например, если запустить код
Код:
...
QDateTime dt = QDateTime::fromString( "2006-11-13 12:54:20", "yyyy-MM-dd HH:mm:ss" );
dt = dt.toTimeSpec(Qt::UTC);
time_t result = dt.toTime_t();
...

То резульататом будет 1163411660 (не правильно), вместо 1163422460 (правильно). Разница 10800 секунд - это три часа. Я нахожусь в часовом поясе Москвы (GTM +3)

Если (для статической QT4) в метод toTimeSpec() передать Qt::LocalTime, Qt::UTC или Qt::OffsetFromUTC то получаешь один и тот же неправильный результат (1163411660)

Как обойти проблему с часовым поясом.
« Последнее редактирование: Июнь 10, 2010, 13:10 от neosapient » Записан
Kolobok
Гость
« Ответ #1 : Июнь 10, 2010, 12:37 »

Прочитать внимательно документацию по методу toTimeSpec.
Записан
neosapient
Гость
« Ответ #2 : Июнь 10, 2010, 13:18 »

Цитировать
Цитировать
QDateTime QDateTime::toTimeSpec ( Qt::TimeSpec specification ) const
Returns a copy of this datetime configured to use the given time specification.

See also timeSpec(), toUTC(), and toLocalTime().

Перевод: Возвращает копию переменной datetime в выбраной конфигурации часового пояса.

Читаю "документацию по методу toTimeSpec" и не вижу того, на что Вы хотели обратить мое внимание - укажите точнее вашу мысль.
« Последнее редактирование: Июнь 10, 2010, 13:30 от neosapient » Записан
Kolobok
Гость
« Ответ #3 : Июнь 10, 2010, 15:50 »

Мне кажется, в строчке с вызовом toTimeSpec не было присваивания. А что бы было как ты хочешь, добавь
Код:
dt.setTimeSpec(Qt::UTC);
Записан
neosapient
Гость
« Ответ #4 : Июнь 10, 2010, 18:43 »

Да я и так
Код:
...
QDateTime dt = QDateTime::fromString( "2006-11-13 12:54:20", "yyyy-MM-dd HH:mm:ss" );
dt = dt.toTimeSpec(Qt::UTC);
time_t result = dt.toTime_t();
...

и так пробовал

Код:
...
QDateTime dt = QDateTime::fromString( "2006-11-13 12:54:20", "yyyy-MM-dd HH:mm:ss" );
dt.toTimeSpec(Qt::UTC);
time_t result = dt.toTime_t();
...

Результат идентичный...
В статической сборке QT4 часовой пояс не учитывается - такое ощущение, что ОС не передает в QT4 свой часовой пояс

Что делать ? (с) Чернышевский
« Последнее редактирование: Июнь 10, 2010, 18:45 от neosapient » Записан
Kolobok
Гость
« Ответ #5 : Июнь 10, 2010, 18:58 »

Пробовал, что я выше написал?
Записан
neosapient
Гость
« Ответ #6 : Июнь 10, 2010, 19:00 »

Пробовал, что я выше написал?
Да, не помогает Грустный
Записан
Kolobok
Гость
« Ответ #7 : Июнь 10, 2010, 19:13 »

Покажи, как пробовал. В твоих примерах я этого не вижу.
Записан
neosapient
Гость
« Ответ #8 : Июнь 11, 2010, 12:16 »

Вроде заработало

Цитировать
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

   QDateTime dt;
   time_t result;

   dt = QDateTime::fromString( "2006-11-13 12:54:20", "yyyy-MM-dd HH:mm:ss" );
   dt.setTimeSpec(Qt::UTC);
   result = dt.toTime_t();

   return 0;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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