2010-11-16 14 views
11

Muszę przeczytać 2 terminy i porównać je.Jaki jest najlepszy sposób porównywania dat w Perlu?

Jedna data to data_aktualna (rok, miesiąc, data) druga jest określona przez logikę biznesową. Następnie muszę porównać 2 daty i zobaczyć, czy jest przed innymi.

Jak mogę zrobić to samo w Perlu?

Poszukuję dobrej dokumentacji, ale w Perlu znajduje się tak wiele modułów Data. Nie wiem, który z nich jest odpowiedni.

+0

Możesz być zainteresowany tą [propozycją wymiany stosu] (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "recenzja kodu"). Jest prawie gotowy do rozpoczęcia beta, wystarczy kilka dodatkowych. – greatwolf

Odpowiedz

18

Jednym z najbardziej popularnych modułów daty jest DateTime, który obsłuży wszystkie narożne przypadki i inne problemy związane z datowaniem matematycznym.

Ten link jest FAQ dla DateTime, które mogą pomóc Ci zacząć:

Sposób moduł DateTime działa to, że konwertowanie dat (który będzie prawdopodobnie strings) w obiektach DateTime, które można następnie porównać, używając jednej z kilku metod: DateTime. W poniższych przykładach $dt1 i $dt2 są obiektami .

$days jest Różnica między tymi dwoma terminami:

my $days = $dt1->delta_days($dt2)->delta_days; 

$cmp jest -1, 0 i 1, w zależności od tego, czy $dt1 jest mniejsza, równa lub przekracza $dt2.

my $cmp = DateTime->compare($dt1, $dt2); 
+11

Jedną z wielu fajnych rzeczy związanych z DateTime jest przeciążenie operatora - np. możesz porównać dwa obiekty DateTime jako 'if ($ dt1 <$ dt2) {...}' – Ether

27

Jeżeli terminy są ISO-8601 (tj YYYY-MM-DD) i nie trzeba, aby je potwierdzić, można porównać leksykograficznie (czyli operatorzy lt i gt).

Jeśli trzeba zweryfikować daty, manipulować datami lub parsować niestandardowe formaty - użyj modułu CPAN. Najlepsze, IMHO, są DateTime i DateCalc. Date-Simple też jest całkiem niezły.

Dobrym miejscem na rozpoczęcie podróży jest przeczytanie The Many Dates of Perl i DateTime site.

Powiązane problemy