Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用DateTime->compare()对日期排序_Perl - Fatal编程技术网

Perl 使用DateTime->compare()对日期排序

Perl 使用DateTime->compare()对日期排序,perl,Perl,我尝试使用以下方法按时间顺序对一系列日期进行排序: 输出: 预期产出: %D相当于%m/%D/%y,其中%y是两位数的年份。您希望使用格式%m/%d/%Y来支持四位数年份。使用%D和%m/%D/%y,您的所有输入都被解释为2020年。%D相当于%m/%D/%y,其中%y是两位数的年份。您希望使用格式%m/%d/%Y来支持四位数年份。使用%D和%m/%D/%y,您的所有输入都被解释为2020年。[这是一个注释,而不是答案] 在这里使用DateTime太过分了 sub date_sort {

我尝试使用以下方法按时间顺序对一系列日期进行排序:

输出:

预期产出:

%D相当于%m/%D/%y,其中%y是两位数的年份。您希望使用格式%m/%d/%Y来支持四位数年份。使用%D和%m/%D/%y,您的所有输入都被解释为2020年。

%D相当于%m/%D/%y,其中%y是两位数的年份。您希望使用格式%m/%d/%Y来支持四位数年份。使用%D和%m/%D/%y,您的所有输入都被解释为2020年。

[这是一个注释,而不是答案]

在这里使用DateTime太过分了

sub date_sort {
    my ( $date1, $date2 ) = @_;
    $date1 = sprintf '%3$s%1$02s%2$02s', split /\//, $date1;
    $date2 = sprintf '%3$s%1$02s%2$02s', split /\//, $date2;
    return $date1 cmp $date2;
}

my @res = sort { date_sort( $a->[1], $b->[1] ) } @dates;
更好的是

use Sort::Key qw( ikeysort );

sub date_key {
    my ( $date ) = @_;
    return sprintf '%3$s%1$02s%2$02s', split /\//, $date;
}

my @res = ikeysort { date_key( $_->[1] ) } @dates;
[这是评论而不是回答]

在这里使用DateTime太过分了

sub date_sort {
    my ( $date1, $date2 ) = @_;
    $date1 = sprintf '%3$s%1$02s%2$02s', split /\//, $date1;
    $date2 = sprintf '%3$s%1$02s%2$02s', split /\//, $date2;
    return $date1 cmp $date2;
}

my @res = sort { date_sort( $a->[1], $b->[1] ) } @dates;
更好的是

use Sort::Key qw( ikeysort );

sub date_key {
    my ( $date ) = @_;
    return sprintf '%3$s%1$02s%2$02s', split /\//, $date;
}

my @res = ikeysort { date_key( $_->[1] ) } @dates;

提示:如果您处理的是日期而不是时间,那么请使用时区=>“浮动”。使用本地时区可能会给您带来一些好处。提示:如果您处理的是日期而不是时间,那么请使用时区=>“浮动”。使用当地时区可以给你带来更多的好处。
use Sort::Key qw( ikeysort );

sub date_key {
    my ( $date ) = @_;
    return sprintf '%3$s%1$02s%2$02s', split /\//, $date;
}

my @res = ikeysort { date_key( $_->[1] ) } @dates;