How can I change the date formats in Perl?

前端 未结 5 1772
生来不讨喜
生来不讨喜 2020-12-07 02:16

I just want to convert the dates from 20111230 format to 30-dec-2011.

相关标签:
5条回答
  • 2020-12-07 02:28

    One way is to use Date::Simple:

    use warnings;
    use strict;
    use Date::Simple qw(d8);
    
    my $d = d8('20111230');
    print $d->format('%d-%b-%Y'), "\n";
    
    __END__
    
    30-Dec-2011
    
    0 讨论(0)
  • 2020-12-07 02:32

    Here is another solution. It uses 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');
    
    0 讨论(0)
  • 2020-12-07 02:36

    A quick solution.

    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;
    }
    
    0 讨论(0)
  • 2020-12-07 02:40

    In keeping with TMTOWTDI, you can use 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");
    
    0 讨论(0)
  • 2020-12-07 02:48

    If I can't use one of the date modules, POSIX isn't so bad and it comes with 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 );
    

    Making @times is a bit ugly. You can't always get what you want, but if you try sometimes, you might find you get what you need.

    0 讨论(0)
提交回复
热议问题