【发布时间】:2016-11-11 14:44:00
【问题描述】:
我最近学习了how to change the timezone returned by localtime in Perl。
use POSIX qw(tzset);
print localtime . "\n";
$ENV{TZ} = 'America/Los_Angeles';
print localtime . "\n";
tzset;
print localtime . "\n";
输出
Wed Apr 15 15:58:10 2009
Wed Apr 15 15:58:10 2009
Wed Apr 15 12:58:10 2009
请注意仅在调用 tzset 后小时才会发生变化。
This is perl, v5.8.8 built for x86_64-linux-thread-multi
但是,在我得到的系统上,
Fri Jul 8 19:00:51 2016
Fri Jul 8 16:00:51 2016
Fri Jul 8 16:00:51 2016
注意在我的系统上,小时如何变化没有调用tzset。这适用于 Ubuntu 和 Illumos 中最新版本的 Perl,以及 Solaris 10 上的 Perl v5.8.8。
所以如果我所有的测试都表明tzset 没有效果,为什么/其他系统需要显式调用tzset?我是否仍需要致电tzset 以保持与某些环境的兼容性,还是现在已成为过去?
【问题讨论】:
-
perldoc.perl.org/perlport.html#Time-and-Date tl;dr - 系统的时间和日历日期的概念以不同的方式进行控制。不要假设时区存储在 $ENV{TZ} 中,即使是,也不要假设您可以通过该变量控制时区。
-
我想要一些具体的东西。我的测试表明不拨打
tzset是安全的。由于此处的软件仅适用于特定平台,因此我不想告诉我们的团队做不必要的额外工作。那么,在什么情况下我们需要tzset? -
发布并删除了一个答案,但链接到pubs.opengroup.org/onlinepubs/9699919799/functions/…,上面写着“使用本地时区信息,就好像localtime()调用tzset()一样。”,所以如果系统符合 POSIX 标准,听起来
localtime应该自动调用tzset???这是决定性因素 - 操作系统是否符合 POSIX?
标签: c perl timezone posix localtime