用C语言将UTC时间转换为unix时间戳
我需要知道当前UTC时间并将其转换为Unix时间戳。 我尝试结合使用用C语言将UTC时间转换为unix时间戳,c,C,我需要知道当前UTC时间并将其转换为Unix时间戳。 我尝试结合使用time(),mktime(),gmtime(),但没有得到正确的UTC时间 以下是我正在使用的代码片段: time_t now; struct tm ts; char buf[80]; now = time(NULL); ts = *gmtime(&now); strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts); 这给了我以下输出-->时间:
time()
,mktime()
,gmtime()
,但没有得到正确的UTC时间
以下是我正在使用的代码片段:
time_t now;
struct tm ts;
char buf[80];
now = time(NULL);
ts = *gmtime(&now);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts);
这给了我以下输出-->时间::Sat 2015-01-10 00:14:34 CST,它将本地时间增加5小时30分钟,而不是减少5小时30分钟。
有人能告诉我为什么会发生这种情况吗?的返回值已在UTC中:
time()将时间返回为自历元1970-01-01 00:00:00+0000(UTC)以来的秒数
我不清楚您为什么要进行进一步处理。请调整您的时钟
你的时区是“亚洲/加尔各答”(我找不到任何其他与格林尼治标准时间5:30偏移的时区)
但它的打印时间是格林尼治标准时间(GMT),因为CST ths表明您的计算机时钟配置严重错误
你发布的代码在这里运行良好。我不能让它打印CST而不是GMT。重新考虑这个问题 OP想要一个。这种时间戳是自1970年1月1日以来的秒数。这可能只不过是以下几点
sprintf(buffer, "%lld", (long long) time(NULL));
奥托,OP似乎也想要年-月-日-小时:分钟:秒。这不是UNIX时间戳。这只是一个时间戳,本答案的其余部分讨论了一种可移植的推导方法
time()
返回一些能够表示时间的实类型。它通常是某种整数类型,表示自1970年1月1日起的秒数0:00:00(或)
gmtime()
将时间转换为UTC(GMT)时区的年、月、日等结构
ts = *gmtime(&now);
现在出现了一个编码问题:
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts);
strftime()。相反,它获取区域设置的时区。该结果根据is_daylight_time字段ts.tm_isdst
进行调整。因此,下面的说法毫无意义
ts = *gmtime(&now); // UTC/GMT time
strftime(buf, sizeof(buf), "... %Z ...", &ts); // print local standard time name
改用
ts = *gmtime(&now);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S UTC", &ts);
考虑格式
以下是可能的解决方案:您现在看到的的价值是什么?你当地的实际时间是多少?公布的代码不应该有任何偏移量。我觉得这个问题有点不对劲。我发现有些版本的strftime可以确定gmtime的GMT,有些则不能。这似乎是一个BSD版本。一些版本的struct_tm
包括tm_gmtoff
(int,以东秒数)和tm_区域
,它们给出了区域的文本表示。@Jasen编辑以包含您的见解。
ts = *gmtime(&now);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S UTC", &ts);
strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", &ts);
// 2015-01-06T03:51:57Z