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

retrieving time including time zone using ctime

本文关键字:包括时 时间 ctime 检索 使用      更新时间:2023-10-16

我想从struct tm中检索时区作为下面的格式

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

我可以获得前两组,但无法获得获取时区值的方法。请让我知道它应该如何得到使用c++时间的时区。

问候,iSight

如果您真的想使用标准C库来获取时区,请尝试使用time.h中声明的外部变量'timezone'。请记住,它的值是在tzset()函数调用之后设置的。每个依赖于时区的时间转换函数都会隐式地调用这个函数。你也可以显式地调用tzset()。

'timezone'变量应该像这样在time.h中声明:

extern long timezone;

以秒为单位表示本地时间与UTC的时间差。您还可以使用exn char* tzname[2]来获取DST和非DST时间段的符号时区名称。

你不能直接从结构体tm中计算时区信息,除非你确切地知道与该结构体中存储的时间相对应的UTC时间;

我认为通过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;

请注意,这段代码做了其他事情,但它显示了您可以用来检索您可能需要的信息的所有函数。