Как я могу отформатировать временную метку в Perl? Я хочу получить это временное форматирование: 01/13/2010 20:42:03 - - Где он всегда 2 цифры для номера за исключением года, где он 4 цифры. И это основано на 24-часовых часах. Как я могу сделать это на Perl? Я предпочитаю собственные функции. Ответ 1 POSIX предоставляет strftime: $ perl -MPOSIX -we 'print POSIX::strftime("%m/%d/%Y %H:%M:%S\n", localtime)' 01/27/2010 14:02:34 У вас может возникнуть соблазн написать что-то вроде: my ($sec, $min, $hr, $day, $mon, $year) = localtime; printf("%02d/%02d/%04d %02d:%02d:%02d\n", $day, $mon + 1, 1900 + $year, $hr, $min, $sec); как средство избежать POSIX. Не надо! AFAIK, POSIX.pm находится в ядре с 1996 по 1997 год. Ответ 2 Попробуйте Дата:: Формат Ответ 3 Это подпрограмма, которую я использую. Это позволяет вам получить отметку времени даты в любом формате, который вы предпочитаете. #! /usr/bin/perl use strict; use warnings; use POSIX; use POSIX qw(strftime); sub getTime { my $format = $_[0] || '%Y%m%d %I:%M:%S %p'; #default format: 20160801 10:48:03 AM my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time); return strftime($format, $sec, $min, $hour, $wday, $mon, $year, $mday); } # Usage examples print getTime()."\n"; #20160801 10:48:03 AM print getTime('%I:%M:%S %p')."\n"; #10:48:03 AM print getTime('%A, %B %d, %Y')."\n"; #Monday, August 01, 2016 print getTime('%Y%m%d %H:%M:%S')."\n"; #20160801 10:48:03
Ответ 1 POSIX предоставляет strftime: $ perl -MPOSIX -we 'print POSIX::strftime("%m/%d/%Y %H:%M:%S\n", localtime)' 01/27/2010 14:02:34 У вас может возникнуть соблазн написать что-то вроде: my ($sec, $min, $hr, $day, $mon, $year) = localtime; printf("%02d/%02d/%04d %02d:%02d:%02d\n", $day, $mon + 1, 1900 + $year, $hr, $min, $sec); как средство избежать POSIX. Не надо! AFAIK, POSIX.pm находится в ядре с 1996 по 1997 год.
Ответ 3 Это подпрограмма, которую я использую. Это позволяет вам получить отметку времени даты в любом формате, который вы предпочитаете. #! /usr/bin/perl use strict; use warnings; use POSIX; use POSIX qw(strftime); sub getTime { my $format = $_[0] || '%Y%m%d %I:%M:%S %p'; #default format: 20160801 10:48:03 AM my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time); return strftime($format, $sec, $min, $hour, $wday, $mon, $year, $mday); } # Usage examples print getTime()."\n"; #20160801 10:48:03 AM print getTime('%I:%M:%S %p')."\n"; #10:48:03 AM print getTime('%A, %B %d, %Y')."\n"; #Monday, August 01, 2016 print getTime('%Y%m%d %H:%M:%S')."\n"; #20160801 10:48:03