我在linux机器上试过这段代码,
my $sysdate = strftime "%Y%m%d%T", (localtime);
my $daylight_saving_time = strftime '%z', (localtime);
我得到低于输出,
sysdate = 2013051402:12:02
daylight_saving_time = -0400
我在solaries机器上试过了,我得到了这个
sysdate = 2013051402:12:02
daylight_saving_time = %z
任何人都知道为了在日光浴机器中实现夏令时所做的改变。
先谢谢。
答案 0 :(得分:1)
问题是POSIX::strftime
只调用系统的strftime(3),所以
你得到的是什么 - 或 - 不是。 %z不是POSIX.1标准的一部分
并且跨系统不一致。在其他旧版本的操作系统上,如HPUX,%z,是
与%Z(时区名称)相同。这仅适用于旧版本。
在Solaris 8上,9 strftime不支持%z - 使用Solaris 10。
这适用于更多的现代版本Solaris 10& Solaris 11:
%z替换为ISO 8601:2000标准格式的UTC偏移量 (+ hhmm或-hhmm),如果没有时区,则无字符 可开采。例如,“ - 0430”表示比UTC后4小时30分钟 (格林威治以西)。如果tm_isdst为零,则标准时间关闭 - 设置被使用。如果tm_isdst大于零,则日光节省 如果使用,则时间偏移。如果tm_isdst为负数,则不包含任何字符 归还。
因此,这是一个C库函数问题,perl位于这些库之上。我没有解决方法。
答案 1 :(得分:0)
也许Date::Manip::TZ适用于Solaris:
use Date::Manip::TZ;
my $tz = new Date::Manip::TZ;
say "tz: $tz";