/ / मैं पर्ल में टाइमज़ोन कैसे बदल सकता हूं? - पर्ल, डेटाइम, जी.एम.टी.

मैं पर्ल में टाइमज़ोन कैसे बदल सकता हूं? - पर्ल, डेटाटाइम, जीएमटी

मैं एक तारीख / समय 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);