strftime'%z',(localtime)在solaris机器中无法正常工作

时间:2013-05-14 07:06:53

标签: perl solaris strftime

我在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

任何人都知道为了在日光浴机器中实现夏令时所做的改变。

先谢谢。

2 个答案:

答案 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";