Qt: Как получить смещение GMT ​​устройства? - PullRequest
0 голосов
/ 06 декабря 2010

Все в названии! Я занимаюсь разработкой на Qt 4.7.1 и для Nokia N8.

Я думаю, что мне нужно использовать: QDateTime и timeSpec (Qt::OffsetFromUTC).

Ответы [ 2 ]

0 голосов
/ 19 сентября 2012

Ниже приведена функция, которая возвращает смещение UTC / GMT для любого часового пояса.Для отрицательных смещений UTC вы должны переопределить эту функцию и проверить логическое «isNegative».Я использую это для отправки запросов на сервер, если я хочу проверить, что это не день, когда часы движутся вперед или назад, я просто вызываю функцию дважды, один раз с сегодняшней датой, а затем с завтрашней датой.Если они оба возвращают то же самое, то мы знаем, что часы не переключаются в течение следующих 24 часов на летнее время.

QTime Calendar::getTimeZoneDiff(QDateTime midnightDateTime, bool &isNegative) {
    midnightDateTime.setTime(QTime(0,0));
    QDateTime utc   = midnightDateTime.toUTC();
    QDateTime local = midnightDateTime; 
    local.setTimeSpec(Qt::LocalTime);
    QDateTime offset = local.toUTC();
    QTime properTimeOffset = QTime(offset.time().hour(), offset.time().minute());
    offset.setTimeSpec(Qt::LocalTime);
    utc.setTimeSpec(Qt::UTC);

    if(offset.secsTo(utc) < 0){
        isNegative = true;
    }else{
        isNegative = false;
       properTimeOffset.setHMS(24 - properTimeOffset.hour() - (properTimeOffset.minute()/60.0) - (properTimeOffset.second()/3600.0), properTimeOffset.minute() - (properTimeOffset.second()/60.0), properTimeOffset.second());
        if(!properTimeOffset.isValid()){ //Midnight case
            properTimeOffset.setHMS(0,0,0);
        }
    }
   return properTimeOffset;
}

Мое решение также размещено здесь: Смещение часового пояса

0 голосов
/ 06 декабря 2010

Да и нет. Вы правы, что Qt::OffsetFromUTC дает вам текущее используемое значение.

Но это изменится, учитывая правила перехода на летнее время для часового пояса, в котором вы находитесь. Это давно ожидаемый (еще не реализованный) запрос о добавлении полной поддержки часового пояса в QDateTime:

http://bugreports.qt -project.org / просмотр / QTBUG-71

т.е. Прямо сейчас, если вы используете устройство во Франции и запросите смещение UTC, вы получите один час, но при переходе на летнее время в марте это изменится на два часа. Пожалуйста, имейте это в виду.

...