2013-02-25 40 views
15

में यूनिक्स टाइमस्टैम्प को एक पठनीय तिथि में कनवर्ट करें मेरे पास कुछ यूनिक्स टाइमस्टैम्प हैं (उदाहरण के लिए, 1357810480, इसलिए वे मुख्य रूप से अतीत में हैं)। मैं उन्हें पर्ल का उपयोग करके एक पठनीय दिनांक-प्रारूप में कैसे बदल सकता हूं?पर्ल

उत्तर

12

आप इसके लिए localtime का उपयोग कर सकते हैं।

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp); 
+0

धन्यवाद, लेकिन मैं – hurley

+0

स्टोर करने के लिए हाँ, यह '$ time' में सरणी डाल करना चाहते हैं। उसके बाद घंटा '$ 2 [2] 'उदाहरण के लिए है। – Andomar

+0

धन्यवाद, लेकिन मैं स्वरूपित दिनांक को सीधे एक ही चर में संग्रहीत करना चाहता हूं। क्या आप इसके लिए कोई संभावना देखते हैं? मेरा वर्तमान समाधान वर्तमान दिनांक को सहेजने लगता है, भले ही दिया गया टाइमस्टैम्प कितना पुराना है – hurley

12

आप

my ($S, $M, $H, $d, $m, $Y) = localtime($time); 
$m += 1; 
$Y += 1900; 
my $dt = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $Y,$m, $d, $H, $M, $S); 

इस्तेमाल कर सकते हैं लेकिन यह strftime साथ थोड़ा आसान है:

use POSIX qw(strftime); 
my $dt = strftime("%Y-%m-%d %H:%M:%S", localtime($time)); 

localtime($time) अगर यह अधिक उपयुक्त है gmtime($time) के साथ प्रतिस्थापित किया जा सकता है।

15

Time::Piece (5.10 से पर्ल में मानक) के लिए एकदम सही उपयोग।

use 5.010; 
use Time::Piece; 

my $unix_timestamp = 1e9; # for example; 

my $date = localtime($unix_timestamp)->strftime('%F %T'); # adjust format to taste 

say $date; # 2001-09-09 02:46:40 
+0

''% f% टी' मेरे लिए काम नहीं करता है (शायद मेरे लोकेल की वजह से), लेकिन '% Y-% m-% d'' काम करता है। –

22

त्वरित खोल एक लाइनर:

perl -le 'print scalar localtime 1357810480;' 
Thu Jan 10 10:34:40 2013 

या, यदि आप एक फ़ाइल में टाइम स्टाम्प्स के लिए प्रत्येक पंक्ति में एक होगा यदि:

perl -lne 'print scalar localtime $_;' <timestamps 
+0

सुरुचिपूर्ण और सरल –

+2

यह स्वीकार्य उत्तर होना चाहिए। दूसरों का उपयोग तब किया जा सकता है जब लोग अपनी तिथियों में अधिक गहराई चाहते हैं। सिर्फ टाइमस्टैम्प को देखने के लिए, 'स्केलर लोकटाइम' किया गया। – felwithe

4

या, यदि आप एक है एम्बेडेड टाइमस्टैम्प के साथ फ़ाइल, आप उन्हें जगह में बदल सकते हैं:

$ cat [file] | perl -pe 's/([\d]{10})/localtime $1/eg;' 
+1

वही था जो मुझे चाहिए था! मैं बस अपनी लॉग फ़ाइल को उस पर्ल वन-लाइनर और बिंगो तत्काल दिनांक/समय में पाइप कर सकता हूं। – rob

0

मुझे जेडॉग का जवाब पसंद आया लेकिन मैं जिस आरएचईएल सिस्टम पर काम कर रहा था उस पर ठीक से काम नहीं कर सका। मैं इसे काम करने में सक्षम था। उम्मीद है कि यह किसी की मदद करेगा। यह बदले गए टाइमस्टैम्प के साथ फ़ाइल की सामग्री प्रदर्शित करता है।

cat filename | perl -pe 's/(\d+)/localtime($1)/e'