How do I elegantly print the date in RFC822 format in Perl?的分支,但Windows特定。如何在Windows上優雅地打印Perl中的%z(時區)格式?
在Windows上:
C:\> perl -MPOSIX print strftime('%z', localtime()),"\n";
產量:
Central Daylight Time
我期待:
-0500
有人肯在Linux系統上。我怎樣才能在Windows上獲得「-0500」?
更新:
這樣做真的很糟糕嗎? (假設我不能安裝日期時間或以任何方式將其打包)
C:\> perl -MPOSIX
sub tzoffset {
my $t = time();
my $utc = mktime(gmtime($t));
my $local = mktime(localtime($t));
return ($local - $utc);
}
sub zformat {
my ($tzoffset) = @_;
my $z = '';
if ($tzoffset < 0) {
$z .= '-';
$tzoffset *= -1;
}
my $hours = floor($tzoffset/60/60);
my $minutes = $tzoffset - $hours * 60 * 60;
$z .= sprintf('%02d%02d', $hours, $minutes);
return $z;
}
print zformat(tzoffset()),"\n";
我注意到的問題是,這將返回-0600
VS -0500
(這是我所期待),但我的猜測是,是由於DST計算什麼的?我主要是在尋找一個合適的近似值,但我不明白爲什麼mktime()
正在玩DST?
UPDATE:
發現,tzoffset()
可以在DST而言更加「穩定」,如果你只是手動強制DST關閉。
sub tzoffset {
my $t = time();
my $utc = mktime(gmtime($t));
my @tmlocal = localtime($t);
$tmlocal[8] = 0; # force dst off, timezone specific
my $local = mktime(@tmlocal);
return ($local - $utc);
}
這樣,不管你是DST還是沒有,它會總是返回-0500
這是你從%z
想要的東西。
我認爲你是對的,但我只是希望得到一些體面的...而且我注意到了%Z vs%z的東西,我認爲這有點諷刺意味,因爲Windows在任何地方都區分大小寫,爲什麼不使用strftime()格式的字符串 – dlamotte 2010-04-13 18:56:58