मैं एक तारीख / समय GMT 0 को GMT -6 में पर्ल में बदलने की कोशिश कर रहा हूं।
उदाहरण के लिए, एक डीएचसीपी सर्वर लीज समय निम्नलिखित प्रारूप में है:
2010/02/18 23:48:37
मैं उस समय को स्थानीय समय क्षेत्र (GMT -6) में बदलने की कोशिश कर रहा हूं, लेकिन डेलाइट बचत समय को सम्मानित करने के लिए इसकी आवश्यकता है।
नीचे दी गई स्क्रिप्ट ओवरकिल हो सकती है, लेकिन मुझे यकीन नहीं है कि यहां से कैसे आगे बढ़ना है। (कोई भी सुझाव विवादास्पद होगा)।
my $TIMESTART;
$TIMESTART = "2010/02/18 23:48:37";
$TIMESTART =~ s///-/g;
use DateTime;
use DateTime::TimeZone;
use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
my $tz = DateTime::TimeZone->new( name => "America/Chicago" );
print $tz->offset_for_datetime($dt) . "n";
यह निम्नलिखित लाइनों का उत्पादन करेगा:
2010-02-18T23: 48: 37
-21600
मुझे GMT -6 के स्थानीय समय क्षेत्र को प्राप्त करने के लिए तारीख में -21600 को जोड़ने में सक्षम होना चाहिए, लेकिन मुझे यकीन नहीं है कि इसे कैसे अनुमोदित किया जाए।
उत्तर:
उत्तर № 1 के लिए 18कॉल set_time_zone
विधि 2 बार:
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
$dt->set_time_zone("UTC"); ## set timezone of parsed date time
$dt->set_time_zone("America/Chicago"); ## change timezone in safe way
print DateTime::Format::MySQL->format_datetime($dt),"n"; ## check the result
यह काम किस प्रकार करता है:
- जब आप बनाते हैं
DateTime
समय क्षेत्र निर्दिष्ट किए बिना ऑब्जेक्ट, "फ्लोटिंग" टाइम ज़ोन सेट है - की पहली कॉल
set_time_zone
समय क्षेत्र में परिवर्तन करेंUTC
रूपांतरण के बिना - की दूसरी कॉल
set_time_zone
परिवर्तनUTC
सेवा मेरेAmerica/Chicago
उत्तर № 2 के लिए 1
यह यूटीसी समय को ईटीसी समय में बदल देगा। आप दिनांक के + प्रारूप पैरामीटर का उपयोग करके किसी भी प्रारूप में दिनांक / समय का उपयोग कर सकते हैं।
दिनांक - तिथि = "TZ =" ETC "18:30"
जवाब के लिए 0 № 3
Time::Piece
अच्छी गुणवत्ता के कोड का एक बहुत हल्का टुकड़ा है। या आप बिल्ट-इन और उपयोग कर सकते हैं strftime
तथा POSIX::strptime
उत्तर के लिए -1 № 4
1, डेटटाइम पास करें
2, यदि परिणामी डेटाइम ऑब्जेक्ट ज़ोन फ़्लोटिंग है, तो इसे अपने इच्छित डिफ़ॉल्ट पर सेट करें:
$dt->set_time_zone($localTimeZone) if ($dt->time_zone_short_name() eq "floating");
3, फिर अपना टाइमजोन रूपांतरण करने के लिए फिर से टाइमजोन सेट करें
उत्तर के लिए -2 № 5
#!/usr/bin/perl -w
($sec,$min,$hour,$mday,$mon,$year) = gmtime(time+21600);
$year = $year + 1900;
printf("%02d:%02d:%02d %02d.%02d.%04dn", $hour,$min,$sec,$mday,$mon,$year);