Как вы читаете системное время и дату в Perl? - PullRequest
11 голосов
/ 28 января 2009

Мне нужно прочитать системные часы (время и дату) и отобразить их в удобочитаемом формате на 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 

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

Ответы [ 4 ]

19 голосов
/ 28 января 2009

Использование по местному времени Функция:

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

$now_string = localtime;  # e.g., "Thu Oct 13 04:54:34 1994"
14 голосов
/ 28 января 2009

Вы можете использовать местное время, чтобы получить время, и модуль 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 голосов
/ 28 января 2009

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

Но просто чтобы дать вам еще один вариант. Модуль 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 января 2009 года». Просто чтобы показать некоторые из множества вещей, которые он может сделать.

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

Распечатывается "2009-01-28"

8 голосов
/ 28 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...