c++中基于时区的时间

Time based on time zone in C++

本文关键字:时间 于时区 c++      更新时间:2023-10-16

gmtime()localtime()的区别是什么?我的要求:我需要根据我所在的时区显示时间。我有一个以秒为单位的POSIX(UTC)格式的时间。我有时区偏移(在UTC和我的当前位置之间)在秒。我可以添加或减去时区偏移量。在此之后,我仍然有POSIX格式的时间。为了把它转换成人类的时间,我应该用gmtime()还是localtime()。这是因为我也需要日期。请澄清。谢谢!

您不应该自己提供时区偏移量,而应该通过环境提供实时时区规范。然后,localtime将给出本地化时间。(gmtime总是给你UTC。)假设您的代码看起来像

struct tm time_buffer, *localtime;
localtime = localtime_r(timep, &time_buffer);
printf("The hour is %in", localtime->tm_hour);

,然后通过:

调用程序
$ TZ=Europe/Berlin my-program

,并得到柏林的当地时间,正确调整为夏令时。

如果您确实需要自己提供时区,请阅读man tzset

gmtime为utc协调世界时。它总是一样,无处不在。localtime是对当地时间的解释,取决于时区和夏令时是否有效不是。时区将由环境变量TZ确定。用户应该将其设置为本地时区;如果这个变量未设置,则使用实现定义的默认值:通常是机器所在的时区。