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

solaries マシンで夏時間を取得するために変更を行う必要があることは誰でも知っています。

前もって感謝します。

4

2 に答える 2

1

問題はPOSIX::strftime、システムの strftime(3) を呼び出すだけであるため、それが何であれ、そうでないものも取得することです。%z は POSIX.1 標準の一部ではなく、システム間で一貫していません。HPUX などの他の古いバージョンの OS では、%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 が 0 より大きい場合、夏時間のオフセットが使用されている場合。tm_isdst が負の場合、文字は返されません。

したがって、これは C ライブラリ関数の問題であり、perl はこれらのライブラリの上にあります。回避策はありません。

于 2013-05-15T20:39:41.717 に答える