我想从包含表单string的时间表示的YYYYMMDDThhmmss+TZ中获得unix时间戳。
为此,我将字符串转换为struct tm,然后使用mktime将其转换为unix时间戳。
str = "20150228T202832+02";
struct tm time_struct = {0};
strptime(str,"%Y%m%dT%H%M%S%z", &time_struct);
uint64_t timestamp = mktime(&time_struct); /* ignore and unset TZ */当我使用与我所在的时区不同的时区时,它就成了一个问题。mktime函数忽略并取消设置struct tm的tm_gmtoff字段,返回一个错误的时间戳(差异由string的时区减去my时区)。
mktime忽略struct tm的tm_gmtoff字段mktime要将tm_gmtoff字段设置为当前时区,而不相应地修改struct tm的其余部分?(让struct tm代表不同的时间!)为了纠正这种行为,在调用string之前,我想在struct tm的字段中添加时区和时区之间的差异。
struct tm,我如何才能得到当前的时区?发布于 2017-06-14 15:19:17
下面是响应我的问题的代码片段。诀窍是使用全局变量timezone。
/*
Function: timestamp_from_datetime
Returns the timestamp corresponding to a formated string YYYYMMDDTHHMMSS+TZ
Parameters:
datetime - must be non-NULL
Returns:
The timestamp associated to datetime
*/
time_t timestamp_from_datetime(const char *datetime)
{
struct tm time_struct = (struct tm) {0};
strptime(datetime,"%Y%m%dT%H%M%S%z", &time_struct);
long int gmtoff = time_struct.tm_gmtoff;
return mktime(&time_struct) - gmtoff - timezone;
}https://stackoverflow.com/questions/28991427
复制相似问题