我正在尝试使用time_t current_time = time(NULL)
获取C中的当前时间。
据我了解,它将返回我当前的系统时间。
我稍后尝试使用struct tm* gmt = gmtime(¤t_time)
将其转换为GMT时间。
我使用ctime()
和asctime()
函数打印两次。
我系统上的当前时间是GMT + 1.但是gmtime()
会在current_time
的同时返回给我。我无法理解为什么gmtime()
同时回到我身边。任何帮助将不胜感激。
这里是代码和输出:Windows显示的当前时间是17:54(斯德哥尔摩区域; GMT + 1)。我希望有什么能让我回到15:54。或许我的理解是错误的......
time_t current_time = time(NULL);
struct tm* gmt = gmtime(¤t_time);
struct tm* loc = localtime(¤t_time);
printf("current time: %s\n", ctime(¤t_time));
printf("gmt time %s\n", asctime(gmt));
printf("local time %s\n", asctime(loc));
输出:
current time: Mon Oct 8 17:54:06 2012
gmt time Mon Oct 8 17:54:06 2012
local time Mon Oct 8 17:54:06 2012
接受的解决方案: 来自Simes
那可能是你的问题。检查TZ环境变量的值;如果不存在,则默认为GMT。 Cygwin没有自动从Windows获取时区设置。另请参阅localtime returns GMT for windows programs running on cygwin shells
答案 0 :(得分:1)
time()
返回自纪元以来的秒数。 等于UTC(又名GMT)
Epoch是英国格林威治的1.1.1970,00:00。
所以事实上time()
不会返回时间,而是时间差异。
答案 1 :(得分:1)
time_t类型包含一个值,表示自UNIX纪元以来的秒数。 tm类型包含日历值。
gmtime()只是将系统时间(总是UTC)从time_t转换为tm。这就是价值观相同的原因。如果您想要表示当地时间(GMT + 1),那就是localtime()的用途。
答案 2 :(得分:0)
通过以下两行运行调试器:
struct tm* gmt = gmtime(¤t_time);
struct tm* loc = localtime(¤t_time);
在第二行中断,观察gmt的成员以及当您执行第二行时 - 您将看到一些gmt成员更改值。显然,库使用了一些静态内存。因此,在运行第二个
之前保存第一个语句的结果