- 论坛徽章:
- 0
|
本帖最后由 L_WC 于 2016-05-17 17:34 编辑
年份前两位还是有Bug- use Date::Calc qw(Delta_YMD);
- my $deltaY = 5;
- while(<DATA>){
- chomp;
- s/^\s+//g;
- next unless length;
- my ($date1, $date2) = split;
- my ($date_1, $date_2) = (&Pro($date1), &Pro($date2));
- my ($y, $m, $d);
- if($date_1 < $date_2){
- ($y, $m, $d) = &DiffDay($date_1, $date_2);
- if($y > $deltaY){
- print "$_\n";
- }
- if($y == $deltaY && $m > 0){
- print "$_\n";
- }
- if($y == $deltaY && $m == 0 && $d >=0){
- print "$_\n";
- }
- }
- else{
- ($y, $m, $d) = &DiffDay($date_2, $date_1);
- if($y > $deltaY){
- print "$_\n";
- }
- if($y == $deltaY && $m > 0){
- print "$_\n";
- }
- if($y == $deltaY && $m == 0 && $d >=0){
- print "$_\n";
- }
- }
- }
- sub Pro(){
- my $date = shift;
- if(length($date) == 5){
- if($date =~ /^[0|1]/){
- $date = '20'.$date; ## this is a bug
- }
- if($date =~ /^[8|9]/){
- $date = '19'.$date; ##
- }
- }
- if(length($date) == 6){
- if($date =~ /^[0|1]/){
- $date = '20'.$date; ##
- }
- if($date =~ /^[8|9]/){
- $date = '19'.$date; ##
- }
- }
- return $date;
- }
- sub DiffDay(){
- my ($earlier, $later) = @_;
- my $days;
- my ($earlierYear, $earlierMonth, $earlierDay) = &ConvertDateFormat($earlier);
- my ($laterYear, $laterMonth, $laterDay) = &ConvertDateFormat($later);
- @days = Delta_YMD($earlierYear, $earlierMonth, $earlierDay, $laterYear, $laterMonth, $laterDay);
- return @days;
- }
- sub ConvertDateFormat(){
- my ($date) = @_;
- my ($year, $month, $day) = ();
- if($date =~ m/(\d{4})(\d+)(\d{2})/g){
- ($year, $month, $day) = ($1, $2, $3);
- }
- $month =~ s/0?(\d)/$1/g;
- return ($year, $month, $day);
- }
- __DATA__
- 1999121 20050806
- 20050806 1999121
- 19901019 2016515
- 99121 050806
- 050806 99121
- 901019 16515
复制代码 |
|