Как вы читаете системное время и дату в Perl?

Мне нужно прочитать системные часы (время и дату) и отобразить их в формате, читаемом человеком, в Perl.

В настоящее время я использую следующий метод (который я нашел здесь):

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

Кажется, что это больше для иллюстрации, чем для фактического кода производства. Есть ли более канонический путь?

Ответ 1

Используйте localtime:

В скалярном контексте localtime() возвращает значение ctime (3):

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

Ответ 2

Вы можете использовать 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 strftime are pretty much identical

Ответ 3

Как и кто-то другой, вы можете использовать localtime, но я бы проанализировал его с помощью Date:: Format. Это даст вам временную метку, отформатированную практически так, как вам нужно.

Ответ 4

Как все говорили, "местное время" - это то, как вы приручаете дату, простым и прямым способом.

Но просто для того, чтобы дать вам еще один вариант. модуль DateTime. Этот модуль стал моим любимым.

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

Это напечатает "Сегодня среда, 28 января 2009AD". Просто чтобы показать некоторые из многих вещей, которые он может сделать.

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

Он печатает "2009-01-28"