2009-01-28 56 views
11

我需要讀取系統時鐘(時間和日期)並在Perl中以可讀格式顯示它。如何在Perl中讀取系統時間和日期?

目前,我使用下面的方法(我發現here):

#!/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; 

當你運行程序,你會看到一個更可讀的日期和時間如下:

9:14:42, Wed Dec 28, 2005 

這看起來好像比實際生產代碼更具說明性。有沒有更規範的方法?

回答

19

使用localtime功能:

在標量方面,本地時間()返回 的的ctime(3)值:

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

謝謝,我是做了很多難度比它需要的是。 :) – 2009-01-28 14:31:11

+1

請注意,'本地時間'是當地時間的(a?)美國格式;如果你真的想提供輸出,你必須努力工作。 – 2009-01-28 16:00:23

8

像其他人所說,你可以使用本地時間有人,但我會用Date::Format解析它。它會給你幾乎任何你需要的格式的時間戳。

+0

感謝您的鏈接。我一定會需要這樣的日期/時間以標準的美國格式。 – 2009-01-28 14:33:22

+0

[Date :: Format]的永久鏈接(http://search.cpan.org/dist/TimeDate/lib/Date/Format.pm) – 2011-06-09 15:25:01

14

您可以使用本地時間獲取時間並使用POSIX模塊的strftime對其進行格式化。

儘管使用Date :: Format和它的strftime會很好,因爲它使用更少的開銷,POSIX模塊是用Perl分發的,因此幾乎可以保證在給定的系統上。

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 
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"; 

這將打印「今天是星期三,2009年1月28日」。只是爲了炫耀它可以做的許多事情中的一小部分。

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

它打印出「2009-01-28」

相關問題