Russian Qt Forum

Qt => Общие вопросы => Тема начата: neosapient от Июнь 10, 2010, 12:13



Название: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: 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)

Как обойти проблему с часовым поясом.


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: Kolobok от Июнь 10, 2010, 12:37
Прочитать внимательно документацию по методу toTimeSpec.


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec д
Отправлено: neosapient от Июнь 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" и не вижу того, на что Вы хотели обратить мое внимание - укажите точнее вашу мысль.


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: Kolobok от Июнь 10, 2010, 15:50
Мне кажется, в строчке с вызовом toTimeSpec не было присваивания. А что бы было как ты хочешь, добавь
Код:
dt.setTimeSpec(Qt::UTC);


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec д
Отправлено: neosapient от Июнь 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 свой часовой пояс

Что делать ? (с) Чернышевский


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: Kolobok от Июнь 10, 2010, 18:58
Пробовал, что я выше написал?


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: neosapient от Июнь 10, 2010, 19:00
Пробовал, что я выше написал?
Да, не помогает :(


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: Kolobok от Июнь 10, 2010, 19:13
Покажи, как пробовал. В твоих примерах я этого не вижу.


Название: Re: Помогите исправить часовой пояс для QDateTime::toTimeSpec для статической сборки
Отправлено: neosapient от Июнь 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;
}