2010-12-06 91 views

回答

0

是的,没有。你是正确的,Qt::OffsetFromUTC为您提供当前使用价值。

但是,这将改变给定的夏令时间的规则,你所在的时区这是一个长期拖欠(尚未实施)要求全时区支持添加到QDateTime

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

即现在,如果您在法国使用设备并要求UTC抵消,则会获得一个小时,但在三月份切换到DST时将会变为两个小时。请记住这一点。

+1

我认为,新的链接现在是https://bugreports.qt-project.org/browse/QTBUG-29666 – Vadi 2013-09-10 07:30:28

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

相关问题