यह सबसे आसान तरीका है यूनिक्स समय प्राप्त करने के लिए है:
use Time::Local;
timelocal($second,$minute,$hour,$day,$month-1,$year);
नोट तर्क के विपरीत क्रम और कि जनवरी माह 0. है कई और अधिक विकल्पों के लिए, CPAN से DateTime मॉड्यूल देखें।
पार्सिंग के लिए, Date::Parse सीपीएएन से मॉड्यूल देखें। यदि आपको वास्तव में तारीख पार्सिंग के साथ फैंसी प्राप्त करने की आवश्यकता है, तो Date::Manip सहायक हो सकता है, हालांकि इसका स्वयं का दस्तावेज आपको इससे दूर चेतावनी देता है क्योंकि इसमें बहुत सामान है (यह सामान्य व्यवसाय छुट्टियों जैसी चीजें जानता है, उदाहरण के लिए) और अन्य समाधान बहुत अधिक हैं और तेज।
यदि आपको दिनांक/समय के प्रारूप के बारे में कुछ पता होना है तो आप पार्सिंग करेंगे तो एक साधारण नियमित अभिव्यक्ति पर्याप्त हो सकती है लेकिन आप संभवतः उपयुक्त CPAN मॉड्यूल का उपयोग बंद कर सकते हैं। उदाहरण के लिए, यदि आप जानते हैं कि तिथियां हमेशा वाईएमडीएचएमएस ऑर्डर में होंगी, तो सीपीएएन मॉड्यूल DateTime::Format::ISO8601 का उपयोग करें।
मेरे अपने संदर्भ के लिए, यदि और कुछ नहीं, नीचे एक समारोह मैं एक आवेदन जहाँ मैं पता दिनांकों हमेशा सभी या "एचएमएस" भाग वैकल्पिक का हिस्सा साथ YMDHMS क्रम में हो जाएगा के लिए इस्तेमाल करते हैं। यह किसी भी delimiters स्वीकार करता है (उदाहरण के लिए, "2009-02-15" या "2009.02.15")। यह संबंधित यूनिक्स समय (1 9 70-01-01 00:00:00 जीएमटी के बाद से सेकंड) देता है या -1 यदि यह इसे पार्स नहीं कर सका (जिसका मतलब है कि आप बेहतर सुनिश्चित करते हैं कि आपको कभी भी वैधता को दिनांक 1 9 6 9- 12-31 23:59:59)। यह "20XX" तक "6 9" तक दो अंकों के एक्सएक्स को भी मानता है, अन्यथा "1 9XX" (उदाहरण के लिए, "50-02-15" का अर्थ 2050-02-15 है, लेकिन "75-02-15" का मतलब है 1 9 75- 02-15)।
use Time::Local;
sub parsedate {
my($s) = @_;
my($year, $month, $day, $hour, $minute, $second);
if($s =~ m{^\s*(\d{1,4})\W*0*(\d{1,2})\W*0*(\d{1,2})\W*0*
(\d{0,2})\W*0*(\d{0,2})\W*0*(\d{0,2})}x) {
$year = $1; $month = $2; $day = $3;
$hour = $4; $minute = $5; $second = $6;
$hour |= 0; $minute |= 0; $second |= 0; # defaults.
$year = ($year<100 ? ($year<70 ? 2000+$year : 1900+$year) : $year);
return timelocal($second,$minute,$hour,$day,$month-1,$year);
}
return -1;
}
इस प्रश्न में अजीब वोट नीचे – jdelator
Obligatory चेतावनी है: यूनिक्स Epoch केवल 1 901 - 2038 के लिए परिभाषित किया गया है। – Piskvor
@Piskvor: यह सख्ती से सच नहीं है। और युग को 1 जनवरी 1 9 70 के रूप में परिभाषित किया गया है, न कि एक सीमा। हालांकि, यदि आप 32-बिट पूर्णांक (जो व्यापक सम्मेलन है) में इसका प्रतिनिधित्व करते हैं तो यूनिक्स टाइमस्टैम्प के लिए आपको सबसे अच्छी रेंज मिल जाएगी। –