2016-07-01 5 views

Antwort

2

Verwenden Sie Time::Piece, um Ihre Strings in Objekte zu konvertieren, die direkt verglichen werden können.

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 

use Time::Piece; 

my $date1 = 'Fri Jul 1 05:21:23 2016'; 
my $date2 = 'Thu Jun 30 12:00:00 2016'; 

my $date_format = '%a %b %d %H:%M:%S %Y'; 

my $tp1 = Time::Piece->strptime($date1, $date_format); 
my $tp2 = Time::Piece->strptime($date2, $date_format); 

if ($tp1 < $tp2) { 
    say "$date1 is before $date2"; 
} elsif ($tp1 > $tp2) { 
    say "$date1 is after $date2"; 
} else { 
    say "$date1 is the same as $date2"; 
} 
+0

Warum '5.010' verwenden? – melpomene

+3

Weil ich 'say()' im Programm verwende. 5.10 war auch die erste Version, die Time :: Piece in die Standarddistribution einschloss (natürlich können Benutzer früherer Perl-Versionen diese aus CPAN installieren). Aber hauptsächlich, nehme ich an, weil ich Perl 5.10 als die minimal akzeptable Version für eine ernsthafte Perl-Entwicklung betrachte. –

+2

Ich bevorzuge 'Datetime' & Co für Datum/Zeit-Manipulation, da es etwas universeller ist. Zum Beispiel akzeptiert "Time :: Piece" '' Thu Jul 1 05:21:23 2016' '(beachten Sie den Tag-Namen), während' Datetime' dies nicht tut. –

3

Sie DateTime::Format::Strptime verwenden könnte die Saiten in Datetime Objekte zu analysieren, die Vergleiche zu unterstützen:

use strict; 
use warnings; 
use feature 'say'; 
use DateTime::Format::Strptime; 

my $strp = DateTime::Format::Strptime->new(pattern => '%a %b %d %H:%M:%S %Y'); 

my $dt1 = $strp->parse_datetime("Fri Jul 1 05:21:23 2016"); 
my $dt2 = $strp->parse_datetime("Sat Jul 2 05:21:23 2016");  

if ($dt1 < $dt2) { # or use DateTime->compare() 
    say '$dt1 < $dt2'; 
} 
elsif ($dt1 == $dt2) { 
    say '$dt1 == $dt2'; 
} 
else { 
    say '$dt1 > $dt2'; 
} 
Verwandte Themen