How do I elegantly print the date in RFC822 format in Perl? का एक ऑफशूट, लेकिन विंडोज विशिष्ट।मैं विंडोज पर पर्ल में% z (टाइमज़ोन) प्रारूप को सुंदर ढंग से कैसे प्रिंट करूं?
पर खिड़कियों:
C:\> perl -MPOSIX print strftime('%z', localtime()),"\n";
पैदावार:
Central Daylight Time
मैं उम्मीद कर रहा था:
-0500
के रूप में किसी को भी एक Linux सिस्टम पर होगा। मैं विंडोज़ पर "-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
-0500
बनाम (जो मैं उम्मीद थी), लेकिन मेरा अनुमान है कि है डीएसटी गणना या कुछ के कारण है? मैं मुख्य रूप से एक सभ्य अनुमान लगाने की तलाश में हूं, लेकिन मुझे पता नहीं लगा कि mktime()
डीएसटी के साथ क्यों खेल रहा है?
अद्यतन:
बाहर मिला कि tzoffset()
भी बहुत कुछ "स्थिर" डीएसटी के मामले में हो सकता है अगर आप सिर्फ मैन्युअल डीएसटी बंद बाध्य करते हैं।
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);
}
इस तरह, कोई फर्क नहीं पड़ता अगर आप डीएसटी या नहीं कर रहे हैं, यह हमेशा -0500
वापस आ जाएंगे, जो है कि तुम क्या %z
से चाहते हैं।
मुझे लगता है कि आप सही हैं, लेकिन मैं बस कुछ सभ्य होने की उम्मीद कर रहा था ...और मैं% जेड बनाम% z बात जो मैंने सोचा था कि एक तरह से व्यंग्यात्मक था के रूप में विंडोज केस-संवेदी है हर जगह, क्यों strftime नहीं() प्रारूप तार नोटिस किया था – dlamotte