Как я могу изменить форматы даты в Perl? - PullRequest
5 голосов
/ 30 декабря 2011

Я просто хочу преобразовать даты из 20111230 формата в 30-dec-2011.

Ответы [ 5 ]

7 голосов
/ 30 декабря 2011

В соответствии с TMTOWTDI, вы можете использовать Time :: Piece

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $t = Time::Piece->strptime("20111230", "%Y%m%d");
print $t->strftime("%d-%b-%Y\n");
5 голосов
/ 30 декабря 2011

Если я не могу использовать один из модулей даты, POSIX не так уж и плох, и поставляется с perl:

use v5.10;
use POSIX qw(strftime);

my $date = '19700101';

my @times;
@times[5,4,3] = $date =~ m/\A(\d{4})(\d{2})(\d{2})\z/;
$times[5] -= 1900;
$times[4] -= 1;

# strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
say strftime( '%d-%b-%Y', @times );

Создание @times являетсянемного некрасиво Вы не всегда можете получить то, что хотите, но если вы попробуете иногда, вы можете найти то, что вам нужно.

4 голосов
/ 30 декабря 2011

Одним из способов является использование Дата :: Простой :

use warnings;
use strict;
use Date::Simple qw(d8);

my $d = d8('20111230');
print $d->format('%d-%b-%Y'), "\n";

__END__

30-Dec-2011
3 голосов
/ 31 декабря 2011

Быстрое решение.

my $date = '20111230';
my @months = (
    'Jan','Feb','Mar','Apr',
    'May','Jun','Jul','Aug','Sep',
    'Oct','Nov','Dec'
);

if($date =~ m/^(\d{4})(\d{2})(\d{2})$/){
        print $3 . '-' . $months[$2-1] . '-' . $1;
}
2 голосов
/ 30 декабря 2011

Вот еще одно решение. Используется DateTimeX::Easy:

#!/usr/bin/env perl

use strict;
use warnings;

use DateTimeX::Easy;

my $dt = DateTimeX::Easy->parse('20111230');
print lc $dt->strftime('%d-%b-%G');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...