1

我在linux机器上试过这段代码,

my $sysdate = strftime "%Y%m%d%T", (localtime);    
my $daylight_saving_time = strftime '%z', (localtime);

我得到低于输出,

sysdate = 2013051402:12:02    
daylight_saving_time = -0400

我在太阳能机器上试过同样的方法,我得到了这个

sysdate = 2013051402:12:02
daylight_saving_time = %z

任何人都知道要在太阳能机器中获得夏令时所做的更改。

提前致谢。

4

2 回答 2

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 标准格式(+hhmm 或 -hhmm)中的 UTC 偏移量,或者如果无法确定时区,则替换为无字符。例如,“-0430”表示比 UTC(格林威治以西)晚 4 小时 30 分钟。如果 tm_isdst 为零,则使用标准时间偏移。如果 tm_isdst 大于零,则夏令时时间偏移(如果使用)。如果 tm_isdst 为负数,则不返回任何字符。

因此,这是一个 C 库函数问题,perl 位于这些库之上。我没有解决方法。

于 2013-05-15T20:39:41.717 回答
0

也许Date::Manip::TZ适用于 Solaris:

   use Date::Manip::TZ;
   my $tz = new Date::Manip::TZ;
   say "tz: $tz";
于 2013-05-14T10:07:24.217 回答