2009-01-28 10 views
11

मैं सिस्टम घड़ी (समय और तारीख) पढ़ सकते हैं और पर्ल में एक मानव पठनीय प्रारूप में प्रदर्शित करने के लिए की जरूरत है।पर्ल में सिस्टम समय और दिनांक कैसे पढ़ते हैं?

:

#!/usr/local/bin/perl 
@months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); 
@weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun); 
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); 
$year = 1900 + $yearOffset; 
$theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year"; 
print $theTime; 

जब आप प्रोग्राम चलाने के लिए, आप एक अधिक पठनीय तारीख और इस तरह समय देखना चाहिए:

वर्तमान में, मैं निम्न विधि (जो मैं here पाया जाता है) का उपयोग कर रहा

9:14:42, Wed Dec 28, 2005 

ऐसा लगता है कि वास्तविक उत्पादन कोड की तुलना में यह चित्रण के लिए अधिक है। क्या कोई और वैधानिक तरीका है?

उत्तर

19

उपयोग localtime समारोह:

अदिश संदर्भ में, स्थानीयसमय() रिटर्न ctime (3) मूल्य:

$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" 
+0

धन्यवाद, मैं यह एक बहुत कठिन की तुलना में यह होने की जरूरत बना रही थी। :) –

+1

ध्यान दें कि 'स्थानीयसमय' (एक?) स्थानीय समय के अमेरिकी प्रारूप है, यदि आप वास्तव में आउटपुट प्रदान करना चाहते हैं, तो आपको थोड़ा कठिन काम करना होगा। –

8
किसी और उल्लेख किया है, आप स्थानीयसमय उपयोग कर सकते हैं जैसा

, लेकिन मैं इसे Date::Format के साथ पार्स कर दूंगा। यह आपको टाइमस्टैम्प को किसी भी तरह से प्रारूपित करने के लिए प्रारूपित करेगा।

+0

लिंक के लिए धन्यवाद। मानक यू.एस. प्रारूप में तारीख/समय डालने के लिए मुझे निश्चित रूप से इसकी आवश्यकता होगी। –

+0

पर्मालिंक करने के लिए [दिनांक :: स्वरूप] (http://search.cpan.org/dist/TimeDate/lib/Date/Format.pm) –

+0

दिनांक :: स्वरूप सुंदर व्यर्थ लगता है। जैसा कि लोगों ने उल्लेख किया है, POSIX :: strftime वह सब करता है। –

14

आप स्थानीयसमय का उपयोग समय और POSIX मॉड्यूल के strftime यह फ़ॉर्मेट करने के लिए प्राप्त करने के लिए कर सकते हैं।

हालांकि दिनांक :: प्रारूप और इसका अंतराल उपयोग करना अच्छा होगा क्योंकि यह कम ओवरहेड का उपयोग करता है, POSIX मॉड्यूल पर्ल के साथ वितरित किया जाता है, और इस प्रकार किसी दिए गए सिस्टम पर होने की बहुत गारंटी है।

use POSIX; 
print POSIX::strftime("%A, %B %d, %Y", localtime()); 
# Should print something like Wednesday, January 28, 2009 
# ...if you're using an English locale, that is. 
# Note that this and Date::Format's strftime are pretty much identical 
+2

आधुनिक में पर्ल> = 5.10 मैं भी सिफारिश करेंगे समय :: टुकड़ा (http://perldoc.perl.org/Time/Piece.html) –

8

जैसा कि सभी ने कहा "लोकलटाइम" यह है कि आप एक आसान और सीधे आगे के रास्ते में कैसे तारीख को कम करते हैं।

लेकिन अभी आप एक और विकल्प देने के लिए। DateTime module। यह मॉड्यूल मेरा पसंदीदा बन गया है।

use DateTime; 
my $dt = DateTime->now; 

my $dow = $dt->day_name; 
my $dom = $dt->mday; 
my $month = $dt->month_abbr; 
my $chr_era = $dt->year_with_christian_era; 

print "Today is $dow, $month $dom $chr_era\n"; 

यह "आज बुधवार, 28 जनवरी 200 9एडी" प्रिंट करेगा। बस कुछ चीजों को दिखाने के लिए यह कर सकते हैं।

use DateTime; 
print DateTime->now->ymd; 

यह पता प्रिंट "2009-01-28"

+0

और, परम लचीलेपन के लिए, दिनांक समय वस्तु एक 'strftime' विधि है। –

संबंधित मुद्दे