我正在尝试将UTC时间设为time_t
。
下面的代码似乎正确,但令人惊讶的是只打印本地时间:
time_t mytime;
struct tm * ptm;
time ( &mytime ); // Get local time in time_t
ptm = gmtime ( &mytime ); // Find out UTC time
time_t utctime = mktime(ptm); // Get UTC time as time_t
printf("\nLocal time %X (%s) and UTC Time %X (%s)", mytime, ctime(&mytime), utctime, ctime(&utctime));
我们可以看到mytime
和utctime
的值不同。
但是,当作为参数传递给ctime
时,它会将它们转换为相同的字符串。
当地时间 55D0CB59 (2015年8月16日星期日23:11:45)和UTC时间 55D07E01 (2015年8月16日星期日23:11:45)
答案 0 :(得分:3)
ctime结果是一个静态变量。不要在同一个print语句中使用ctime两次。在两个单独的印刷声明中进行。
如果用asctime替换ctime,则会出现同样的问题,因为asctime也会将结果作为静态变量返回。
答案 1 :(得分:2)
答案 2 :(得分:2)
ctime
函数以人类可读的格式返回包含日期和时间信息的C字符串。
要获得UTC时间,您可以使用gettimeofday()
(适用于Linux) -
struct timeval ptm;
gettimeofday(&ptm,NULL);
long int ms = ptm.tv_sec * 1000 + ptm.tv_usec / 1000;
你可以在windows中看到函数GetSystemTime
。
答案 3 :(得分:0)
根据定义,C time()
函数以UTC返回time_t
纪元时间。因此,注释为“ //在time_t中获取本地时间”的代码确实已经获取了UTC,并且注释不正确。
在Linux手册页中:
time_t time(time_t * tloc);
time()返回的时间是自1970年1月1日00:00:00 +0000( UTC )以来的秒数。
提供代码:
#include <time.h>
...
time_t utc_now = time( NULL );