2013-08-07 8 views
12

मुझे प्रारूप "20130808 12:12:12.123" यानी "yyyymmdd hour:min:sec.msec" प्रारूप में समय प्राप्त करने की आवश्यकता है।पर्ल में समय के एक हिस्से के रूप में 'मिलीसेकंड' कैसे प्राप्त करें?

मैं

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 
$year += 1900; 
$mon++; 
if ($mon<10){$mon="0$mon"} 
if ($mday<10){$mday="0$mday"} 
if ($hour<10){$hour="0$hour"} 
if ($min<10){$min="0$min"} 
if ($sec<10){$sec="0$sec"} but this doesn't provide the `msec` as a part of time. 

मैं ऐसा कर सकते हैं कैसे की कोशिश की?

उत्तर

10

उपयोग Time::HiRes

इस संक्षिप्त को देखते हुए, यह आसानी से युग काफी के बाद मिलीसेकेंड प्रदान कर सकते हैं लेकिन स्थानीयसमय() का विस्तार करने नहीं मालूम था, इसलिए वहाँ शायद काम का एक सा एक पूर्ण में इसका उपयोग करने में शामिल है कैलेंडर संदर्भ।

use strict; 
use warnings; 

use Time::Format qw/%time/; 
use Time::HiRes qw/gettimeofday/; 

my $time = gettimeofday; # Returns ssssssssss.uuuuuu in scalar context 

print qq|$time{'yyyymmdd hh:mm:ss.mmm', $time}\n|; 
+0

[समय :: HiRes] (http://perldoc.perl.org/Time/HiRes.html) एक कोर मॉड्यूल है जिसका अर्थ है कि यह वितरण का एक हिस्सा है। – devnull

+1

@devnull धन्यवाद। मैं तब जवाब संपादित कर दूंगा। – Paul

+0

@devnull और पॉल: धन्यवाद। –

18

यहां एक संपूर्ण स्क्रिप्ट है:

यहाँ एक काम कर उदाहरण है। जैसा कि पहले प्रस्तावित किया गया है, यह माइक्रोसॉन्ड समर्थन के लिए Time::HiRes::time का उपयोग कर रहा है, और यह आसान स्वरूपण के लिए POSIX::strftime का भी उपयोग कर रहा है। दुर्भाग्यवश strftime माइक्रोसेकंड से निपट नहीं सकता है, इसलिए इसे मैन्युअल रूप से जोड़ा जाना है।

use Time::HiRes qw(time); 
use POSIX qw(strftime); 

my $t = time; 
my $date = strftime "%Y%m%d %H:%M:%S", localtime $t; 
$date .= sprintf ".%03d", ($t-int($t))*1000; # without rounding 

print $date, "\n"; 
+0

यह काम करता है मुझे .. किसी भी पैकेज को स्थापित करने की जरूरत नहीं है ... धन्यवाद – spn

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