如何在Perl中读取系统时间和日期?

问题描述:

我需要读取系统时钟(时间和日期)并在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 

这看起来好像比实际生产代码更具说明性。有没有更规范的方法?

使用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

像其他人所说,你可以使用本地时间有人,但我会用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

您可以使用本地时间获取时间并使用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 

正如其他人所说的“本地时间”是你如何驯服约会,以一种简单而直接的方式。

但只是给你一个更多的选择。 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”