Ответ 1
Используйте localtime:
В скалярном контексте localtime() возвращает значение ctime (3):
$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
Мне нужно прочитать системные часы (время и дату) и отобразить их в формате, читаемом человеком, в 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
Кажется, что это больше для иллюстрации, чем для фактического кода производства. Есть ли более канонический путь?
Используйте localtime:
В скалярном контексте localtime() возвращает значение ctime (3):
$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
Вы можете использовать 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
Как и кто-то другой, вы можете использовать localtime, но я бы проанализировал его с помощью Date:: Format. Это даст вам временную метку, отформатированную практически так, как вам нужно.
Как все говорили, "местное время" - это то, как вы приручаете дату, простым и прямым способом.
Но просто для того, чтобы дать вам еще один вариант. модуль 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"