मैंने वर्तमान दिनांक और समय प्राप्त करने के लिए पर्ल में localtime फ़ंक्शन का उपयोग किया है लेकिन मौजूदा तिथियों में पार्स करने की आवश्यकता है। मेरे पास निम्नलिखित प्रारूप में जीएमटी तिथि है: "200 90103 12:00" मैं इसे उस तारीख ऑब्जेक्ट में पार्स करना चाहता हूं जिसके साथ मैं काम कर सकता हूं और फिर जीएमटी समय/दिनांक को अपने वर्तमान समय क्षेत्र में परिवर्तित कर सकता हूं जो वर्तमान में पूर्वी मानक समय है । तो मैं इसे "200 90103 12:00" से "20090103 7:00" में कनवर्ट करना चाहता हूं, इस बारे में कोई जानकारी कितनी सराहना की जाएगी।मैं पर्ल में तिथियों का विश्लेषण कैसे कर सकता हूं और समय क्षेत्र कैसे बदल सकता हूं?
उत्तर
क्योंकि डेटल हैंडलिंग इंटरफेस में निर्मित पर्ल एक प्रकार का गुंजाइश है और आप लगभग आधे दर्जन चरों को पार करते हैं, बेहतर तरीका DateTime या Time::Piece का उपयोग करना बेहतर तरीका है। डेटटाइम सभी गायन, ऑल-डांसिंग पर्ल डेट ऑब्जेक्ट है, और आप शायद अंततः इसका उपयोग करना चाहेंगे, लेकिन टाइम :: टुकड़ा इस काम के लिए सरल और पूरी तरह से पर्याप्त है, 5.10 के साथ शिपिंग का लाभ है और तकनीक है मूल रूप से दोनों के लिए एक ही है।
टाइम :: टुकड़ा और strptime का उपयोग करके सरल, लचीला तरीका यहां दिया गया है।
#!/usr/bin/perl
use 5.10.0;
use strict;
use warnings;
use Time::Piece;
# Read the date from the command line.
my $date = shift;
# Parse the date using strptime(), which uses strftime() formats.
my $time = Time::Piece->strptime($date, "%Y%m%d %H:%M");
# Here it is, parsed but still in GMT.
say $time->datetime;
# Create a localtime object for the same timestamp.
$time = localtime($time->epoch);
# And here it is localized.
say $time->datetime;
और यहां के विपरीत, इसके विपरीत है।
प्रारूप ठीक होने के बाद, एक नियमित अभिव्यक्ति ठीक करेगी, लेकिन अगर प्रारूप में परिवर्तन होता है तो आपको रेगेक्स को ट्विक करना होगा।
my($year, $mon, $day, $hour, $min) =
$date =~ /^(\d{4}) (\d{2}) (\d{2})\ (\d{2}):(\d{2})$/x;
तो यह यूनिक्स काल समय (जनवरी 1st के बाद से सेकंड, 1970)
use Time::Local;
# Note that all the internal Perl date handling functions take month
# from 0 and the year starting at 1900. Blame C (or blame Larry for
# parroting C).
my $time = timegm(0, $min, $hour, $day, $mon - 1, $year - 1900);
और फिर वापस अपने स्थानीय समय में करने के लिए कनवर्ट
।
(undef, $min, $hour, $day, $mon, $year) = localtime($time);
my $local_date = sprintf "%d%02d%02d %02d:%02d\n",
$year + 1900, $mon + 1, $day, $hour, $min;
यहां तक कि जब आप स्वयं को रोल करते हैं, तो कोई भी कम से कम पर्ल 5.6.0 आगे से यूनिक्स और विंडोज सिस्टम दोनों पर POSIX qw (strftime) 'का उपयोग कर सकता है। इससे अंतिम "रोल-अप-खुद" दोनों छोटे और अधिक रखरखाव बनने की अनुमति देता है: 'मेरा $ local_date = strftime "% वाई% एम% डी% एच:% एम \ n", लोकलटाइम ($ time); '। – pjf
$ समय-> लोकलटाइम-> tzoffset AFAICT वर्तमान समय के लिए ऑफ़सेट लौटाता है, दिए गए समय पर नहीं। – ysth
@ysth हां, और यह ठीक है जब तक कि हम ऐतिहासिक समय क्षेत्र परिवर्तनों के बारे में चिंता न करना चाहते हैं, जो मुझे यकीन नहीं है। डीएसटी महत्वपूर्ण हो सकता है। – Schwern
अपने पिकअप लें:
- DateTime :: * (वैकल्पिक रूप से, datetime.perl.org पर)
- Date::Manip
- Date::Calc (2004 में अंतिम अद्यतन)
रहे हैं एक असंख्य दूसरों, इसमें कोई संदेह नहीं है, लेकिन वे शायद शीर्ष दावेदार हैं।
दिनांक :: 200 9 में कैल्क की काफी गतिविधि थी। – rlandster
लेकिन मुझे नहीं लगता कि गतिविधि 4 जनवरी 200 9 तक हुई थी जब मैंने उस टिप्पणी को लिखा था। हालांकि, यह जानना अच्छा है कि इसे बनाए रखा जा रहा है। पर्ल प्रगति के रूप में अच्छी स्थिर मॉड्यूल को ज़रूरी काम की ज़रूरत नहीं है। –
यहाँ एक उदाहरण है, DateTime और उसके strptime प्रारूप मॉड्यूल का उपयोग कर।
use DateTime;
use DateTime::Format::Strptime;
my $val = "20090103 12:00";
my $format = new DateTime::Format::Strptime(
pattern => '%Y%m%d %H:%M',
time_zone => 'GMT',
);
my $date = $format->parse_datetime($val);
print $date->strftime("%Y%m%d %H:%M %Z")."\n";
$date->set_time_zone("America/New_York"); # or "local"
print $date->strftime("%Y%m%d %H:%M %Z")."\n";
$ perl dates.pl
20090103 12:00 UTC
20090103 07:00 EST
आप स्थानीयसमय पार्स करने के लिए चाहता था, तो यहां आप इसे कैसे आप कर चाहते हैं :)
use DateTime;
my @time = (localtime);
my $date = DateTime->new(year => $time[5]+1900, month => $time[4]+1,
day => $time[3], hour => $time[2], minute => $time[1],
second => $time[0], time_zone => "America/New_York");
print $date->strftime("%F %r %Z")."\n";
$date->set_time_zone("Europe/Prague");
print $date->strftime("%F %r %Z")."\n";
और इसके साथ क्या गलत है? –
आप पार्सिंग भाग खो रहे हैं। – Schwern
ओह, सच है। मैंने गलती से माना कि वह लोकलटाइम आउटपुट का उपयोग करना चाहता था। –
मुझे क्या करना चाहते हैं क्या है कि ...
#!/usr/bin/perl
use Date::Parse;
use POSIX;
$orig = "20090103 12:00";
print strftime("%Y%m%d %R", localtime(str2time($orig, 'GMT')));
है Time::ParseDate
और parsedate()
का उपयोग Date::Parse
और str2time()
के बजाय भी कर सकते हैं। ध्यान दें कि वास्तव में मानक एटीएम। ऐसा लगता है कि डेटटाइम (लेकिन हो सकता है कि आप टाइमस्टैम्प को कन्वर्ट करने के लिए ओओ सिंटैक्स का उपयोग नहीं करना चाहें)।
यह एक एफटीडब्ल्यू है। –
use strict;
use warnings;
my ($sec,$min,$hour,$day,$month,$year)=localtime();
$year+=1900;
$month+=1;
$today_time = sprintf("%02d-%02d-%04d %02d:%02d:%02d",$day,$month,$year,$hour,$min,$sec);
print $today_time;
यह कोड केवल वर्तमान स्थानीय समय को प्रिंट करता है। यह सवाल का जवाब नहीं देता है। – nwellnhof
- 1. मैं पर्ल में तिथियों को कैसे सत्यापित कर सकता हूं?
- 2. मैं पर्ल में तिथियों को कैसे क्रमबद्ध कर सकता हूं?
- 3. मैं पर्ल के साथ सापेक्ष तिथियों का विश्लेषण कैसे कर सकता हूं?
- 4. मैं पर्ल में दिनांक प्रारूप कैसे बदल सकता हूं?
- 5. मैं थोक खोज कैसे कर सकता हूं और पर्ल के साथ प्रतिस्थापित कैसे कर सकता हूं?
- 6. मैं पर्ल में सेट का प्रतिनिधित्व कैसे कर सकता हूं?
- 7. मैं पर्ल के साथ आईपी पते और पता श्रेणियों का विश्लेषण कैसे कर सकता हूं?
- 8. मैं रेगेक्स खोज कैसे कर सकता हूं और शानदार टेक्स्ट 2 में बदल सकता हूं?
- 9. मैं पर्ल का उपयोग करके पासवर्ड कैसे दर्ज कर सकता हूं और अक्षरों को '*' से बदल सकता हूं?
- 10. मैं बाहरी कमांड कैसे चला सकता हूं और पर्ल में अपना आउटपुट कैप्चर कर सकता हूं?
- 11. मैं पर्ल मॉड्यूल निर्भरताओं का प्रबंधन कैसे कर सकता हूं?
- 12. मैं कैसे फीका कर सकता हूं, परीक्षण बदल सकता हूं और फिर jQuery के साथ साफ-सफाई कर सकता हूं?
- 13. मैं webClient.UploadData() के लिए समय सीमा कैसे बदल सकता हूं?
- 14. मैं पर्ल में यूनिक्स grep कैसे कार्यान्वित कर सकता हूं?
- 15. मैं ग्रहण विषय कैसे बदल सकता हूं?
- 16. मैं टीएफएस में एक टीम प्रोजेक्ट और क्षेत्र पथ का नाम कैसे बदल सकता हूं?
- 17. मैं पर्ल में JSON कैसे पार्स कर सकता हूं?
- 18. मैं पर्ल में यूनिट परीक्षण कैसे कर सकता हूं?
- 19. मैं पर्ल में सरणी की तुलना कैसे कर सकता हूं?
- 20. मैं पर्ल में बाइनरी खोज कैसे कार्यान्वित कर सकता हूं?
- 21. मैं पर्ल में एक सशर्त प्रतिस्थापन कैसे कर सकता हूं?
- 22. मैं पर्ल में 64-बिट अंकगणित कैसे कर सकता हूं?
- 23. मैं एक आईएस 8686 टाइमस्टैम्प को पर्ल में यूनिक्स समय में कैसे परिवर्तित कर सकता हूं?
- 24. मैं ASP.NET में फ़ाइल का नाम कैसे बदल सकता हूं?
- 25. मैं Greasemonkey में रिकैप्चा का आकार कैसे बदल सकता हूं?
- 26. मैं पर्ल में टाइमस्टैम्प कैसे प्रारूपित कर सकता हूं?
- 27. मैं सी में सरणी का आकार कैसे बदल सकता हूं?
- 28. मैं Xcode4 में invisibles का रंग कैसे बदल सकता हूं?
- 29. मैं पर्ल क्लास कैसे बना सकता हूं?
- 30. मैं पर्ल में ट्रेसबैक कैसे प्राप्त कर सकता हूं?
यह भी देखें: http: // stackoverflow।कॉम/प्रश्न/95492/कैसे करें-i-convert-a-date – dreeves
इन्हें जांचें: [http://www.bestofperl.com/how-tos/timezone-conversion-date-time ](http:// www.bestofperl.com/how-tos/timezone-conversion-date-time) [http://www.bestofperl.com/how-tos/parsing-datetime-strings](http://www.bestofperl.com/कैसे-tos/पार्सिंग-डेटाटाइम-स्ट्रिंग्स) – Pradeep