我想从struct tm中检索时区,格式如下
2011-12-32 12:13:05 +0530(使用gtime获得)
我可以获得前两组,但无法获得时区值。请告诉我如何使用c ++时间获取时区。
此致 iSight的
答案 0 :(得分:2)
如果您真的想使用标准C库来获取时区,请尝试使用time.h中声明的外部变量'timezone'。请记住,它的值是在tzset()函数调用之后设置的。每次依赖于时区的转换函数都会隐式调用此函数。作为替代方案,您可以显式调用tzset()。
'timezone'变量应该在time.h中声明如下:
extern long timezone;
它包含本地时间和UTC之间的时差,以秒为单位。 您还可以使用exern char * tzname [2]来获取DST和非DST时段的符号时区名称。
您无法直接从struct tm计算时区信息,除非您确切知道与该结构中存储的时间对应的UTC时间;
答案 1 :(得分:0)
我认为通过time.h检索的tm结构包含时区信息,如果您需要的只是与GMT不同。
struct tm {
int tm_sec; /* seconds after the minute [0-60] */
int tm_min; /* minutes after the hour [0-59] */
int tm_hour; /* hours since midnight [0-23] */
int tm_mday; /* day of the month [1-31] */
int tm_mon; /* months since January [0-11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday [0-6] */
int tm_yday; /* days since January 1 [0-365] */
int tm_isdst; /* Daylight Savings Time flag */
long tm_gmtoff; /* offset from CUT in seconds */
char *tm_zone; /* timezone abbreviation */
};
以下内容可以提供帮助:
uint64_t diff;
{
time_t secs = time (NULL);
tm timeParts;
memset(&timeParts, 0, sizeof(timeParts));
tm *timeInfo = localtime_r( &secs, &timeParts );
diff = mktime( timeInfo );
memset(&timeParts, 0, sizeof(timeParts));
timeInfo = gmtime_r ( &secs, &timeParts );
diff -= mktime( timeInfo );
}
return diff;
请注意,此代码会执行其他操作,但会显示您可用于检索可能需要的信息的所有功能。