【发布时间】:2011-09-24 09:28:28
【问题描述】:
类似于:
Convert historical time to GMT
这次我的场景是: 我需要将一些格式为“2011061411322100”的字符串时间转换为 GMT。问题是时代来自另一台PC,是一个历史时期。所以我没有实时获得时间,所以我不能简单地从我的代码正在运行的盒子上的当地时间获取格林威治标准时间。
时间代表开始和结束时间。如果我的代码在时间更改期间运行,则时间更改将应用于我获取时间的远程框。因此,如果更改发生在开始时间和结束时间之间,那么结束时间将被抵消。
我假设我必须先转换为 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 吗?我怎么知道要设置什么?
【问题讨论】:
-
看你的另一个问题我有点困惑:2011061411322100 GMT/UTC 还是当地时间?另一台 PC 是否总是与您的主机 PC 处于同一时区?您希望以什么形式输出 - 带有 GMT/UTC 值的 struct tm?
-
tz 数据库en.wikipedia.org/wiki/Tz_database 有关于历史时区的信息;但这只有在您知道时区并且知道另一台 PC 遵守规则时才有用。
-
可以在c++系统中使用吗?
-
时间发生变化时是否可以监听 Windows 事件?