类似于:
Convert historical time to GMT
这次我的情景是: 我需要将格式为“2011061411322100”的字符串时间转换为GMT。问题是,时代来自另一台PC,是一个历史时期。所以我没有实时获得时间,所以我不能简单地从当地时间到我的代码运行的盒子上获取GMT。
时间表示开始和结束时间。如果我的代码在时间更改期间运行,则时间更改将在我正在获取时间的远程框上应用。因此,如果在开始和结束时间之间发生变化,则结束时间将被抵消。
我假设我必须先转换为tm:
// add to tm struct
tm tmTime;
tmTime.tm_hour = hour;
tmTime.tm_min = min;
tmTime.tm_sec = sec;
tmTime.tm_mday = day;
tmTime.tm_mon = (month-1);
tmTime.tm_year = (year - 1900);
然后转换为time_t
time_t tmInTime_t = mktime( &tmTime );
然后使用gmtime:
struct tm *gmt = gmtime( &tmInTime_t );
如果在开始和结束之间发生时间变化,这仍然会导致大的增量。我该如何解决? 我需要设置.tm_isdst吗?我怎么知道要设置什么?
答案 0 :(得分:1)
您绝对必须知道源数据上的参考时区。简单地说它是源机器上的本地时间并不能提供足够的信息。 考虑(对于许多例子中的一个例子):2007年美国的DST规则发生了变化,跨越该范围的任何日期计算都必须考虑到这一点。当你开始跨政治边界处理时区时,事情变得更加复杂。
http://www.boost.org/doc/libs/1_47_0/doc/html/date_time.html 是一个用C ++编写的健壮时间/日期库的示例,适用于大多数平台。它允许您对日期和时间执行各种“算术”运算。它还包括对TZ数据库的支持,这将允许您在跨越时区规则更改的日期时间上执行操作。