如果它是一个简单的C++
应用程序,在执行期间不需要使用单独的时区,那么您可以简单地使用localtime
来获取一个共享引用,其中包含调用它struct tm *
的特定时区信息。time_t
如果您的系统配置了 PST 时区,那么当您调用 时localtime
,它将使用太平洋时区信息进行显示 - 使用 2012 年 1 月 1 日(格林威治标准时间)和 2012 年 6 月 1 日的示例:
time_t def_time = 1325376000;
struct tm *a_tim = localtime(&def_time);
printf("%s %ld %d\n", a_tim->tm_zone, a_tim->tm_gmtoff, a_tim->tm_isdst);
def_time = 1338505200;
a_tim = localtime(&def_time);
printf("%s %ld %d\n", a_tim->tm_zone, a_tim->tm_gmtoff, a_tim->tm_isdst);
在我的系统(TZ=Europe/Dublin)上显示:
GMT 0 0
IST 3600 1
通过用 America/Los_Angeles 覆盖 TZ 环境变量,我得到:
PST -28800 0
PDT -25200 1
即系统能够很好地确定时区名称、与 GMT 的偏移量以及夏令时是否从 UTC 时间戳开始生效。
编辑:尝试使用 posix 提供的时区例程同时在 C/C++ 程序中使用多个时区是可怕的,如果您处于这种情况,我绝对建议您使用 boost,因为它是一个快速的解决方案。