使用ctime检索包括时区的时间

时间:2011-12-05 07:31:57

标签: c++ gnome

我想从struct tm中检索时区,格式如下

2011-12-32 12:13:05 +0530(使用gtime获得)

我可以获得前两组,但无法获得时区值。请告诉我如何使用c ++时间获取时区。

此致 iSight的

2 个答案:

答案 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;

请注意,此代码会执行其他操作,但会显示您可用于检索可能需要的信息的所有功能。