问:如何获得设备的GMT偏移量?

时间:2010-12-06 09:23:26

标签: c++ qt nokia datetimeoffset

所有都在标题中!我在Qt 4.7.1上开发,而在诺基亚N8上开发。

我认为我需要使用:QDateTimetimeSpec (Qt::OffsetFromUTC)

2 个答案:

答案 0 :(得分:0)

是和否。你是正确的Qt::OffsetFromUTC为你提供当前使用的价值。

但是,根据您所在的时区的夏令时规则,这会发生变化。这是一个长期未完成(尚未实施)的请求,要求QDateTime添加完整的时区支持:

http://bugreports.qt-project.org/browse/QTBUG-71

即。现在,如果您在法国使用设备并要求UTC偏移,您将获得一小时,但在3月切换到DST时将变为两小时。请记住这一点。

答案 1 :(得分:0)

下面是一个返回任何时区的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;
}

我的解决方案也发布在这里:Timezone offset