2010-11-16 28 views
11

Tôi cần phải đọc 2 ngày và so sánh chúng.Cách tốt nhất để so sánh ngày trong Perl là gì?

Một ngày là ngày hiện tại (năm, tháng, ngày) phương thức khác được xác định bởi logic nghiệp vụ. Sau đó, tôi cần phải so sánh 2 ngày và xem liệu một ngày có phải trước ngày kia hay không.

Làm cách nào để tôi có thể thực hiện tương tự trong Perl?

Tôi đang tìm kiếm tài liệu tốt, nhưng tôi đang tìm kiếm rất nhiều mô-đun ngày trong Perl. Không biết cái nào phù hợp với nó.

+0

Bạn có thể quan tâm đến [đề xuất trao đổi ngăn xếp] này (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "xem xét mã"). Nó gần như đã sẵn sàng để bắt đầu phiên bản beta, chỉ cần một vài thứ nữa. – greatwolf

Trả lời

18

Một trong những mô-đun ngày phổ biến nhất là DateTime sẽ xử lý tất cả các trường hợp góc và các vấn đề khác xung quanh toán ngày.

liên kết Đây là một câu hỏi thường gặp cho DateTime có thể giúp bạn bắt đầu:

Cách module DateTime hoạt động là bạn chuyển đổi ngày của bạn (mà có lẽ sẽ là chuỗi) thành các đối tượng DateTime, sau đó bạn có thể so sánh bằng một trong các phương thức DateTime.

Trong các ví dụ bên dưới, $dt1$dt2DateTime đối tượng.

$days là vùng đồng bằng giữa hai ngày:

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

$cmp là -1, 0 hoặc 1, tùy thuộc vào việc $dt1 nhỏ hơn, bằng hoặc hơn $dt2.

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

Một trong nhiều điều thú vị về DateTime là nó có quá tải toàn bộ toán tử - ví dụ: bạn có thể so sánh hai đối tượng DateTime như 'if ($ dt1 <$ dt2) {...}' – Ether

27

Nếu ngày là ISO-8601 (ví dụ, YYYY-MM-DD) và bạn không cần phải xác nhận chúng, bạn có thể so sánh thứ tự từ điển (tức là, ltgt nhà khai thác.)

Nếu bạn cần phải xác thực ngày, thao tác ngày tháng, hoặc phân tích các định dạng không chuẩn - sử dụng một mô-đun CPAN. Tốt nhất, IMHO, là DateTimeDateCalc. Date-Simple cũng khá tốt.

Một nơi tốt để bắt đầu hành trình của riêng bạn là đọc The Many Dates of PerlDateTime site.

Các vấn đề liên quan