我需要读取系统时钟(时间和日期)并在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
这似乎更像是为了说明而不是实际的生产代码。有更规范的方式吗?
答案 0 :(得分:19)
使用localtime功能:
在标量上下文中,localtime()返回 ctime(3)值:
$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
答案 1 :(得分:14)
您可以使用localtime来获取时间,并使用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
答案 2 :(得分:8)
与其他人提到的一样,您可以使用localtime,但我会使用Date::Format解析它。它会以几乎任何你需要的方式为你提供格式化的时间戳。
答案 3 :(得分:8)
正如其他人所说的那样,“本地时间”是你如何以简单直接的方式驯服约会。
但只是给你一个选择。 DateTime module。{{3}}。这个模块已成为我的最爱。
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”
答案 4 :(得分:0)
最简单的单行打印语句以清晰易读的格式打印本地时间:
flag ETA Course / Speed Last report
0 Denmark Nov 24, 00:01 241.6° / 12.0 kn Nov 22, 2019 09:04 UTC
1 Denmark Nov 23, 11:30 184.8° / 13.9 kn Nov 22, 2019 09:07 UTC