一切都在标题中!我是在Qt 4.7.1上开发的,它是在诺基亚N8上使用的。
我认为我需要使用:QDateTime和timeSpec (Qt::OffsetFromUTC)。
发布于 2010-12-06 20:16:09
是也不是。您说得对,Qt::OffsetFromUTC为您提供了当前正在使用的值。
但这会改变你所在时区的夏令时规则。向QDateTime添加全时区支持是一个长期未解决(尚未实现)的请求
http://bugreports.qt-project.org/browse/QTBUG-71
也就是说,现在,如果你在法国使用一个设备,并要求UTC偏移,你将得到一个小时,但当三月份切换到DST时,这个时间将变成两个小时。请记住这一点。
发布于 2012-09-20 00:50:07
下面是一个函数,它返回任何时区的UTC/GMT偏移。对于负的协调世界时偏差,您必须覆盖此函数并检查布尔值"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
https://stackoverflow.com/questions/4364858
复制相似问题