2011-08-12 42 views
5

Tôi đang cố gắng chuyển đổi một chuỗi trong dateformat như 'Aug 12/11' .. thành 'YYYY-MM-DD', trong ví dụ này sẽ là '2011-08-12' .Định dạng ngày Perl/regex chuyển đổi

Điều gì sẽ là perl/regex tốt nhất để sử dụng cho chuyển đổi này? tôi đã có thể làm điều đó bằng cách phân tích cú pháp và chuyển đổi nó bằng tay .. nhưng tôi đoán có một cách nhanh hơn để làm điều đó với perl/regex. Cảm ơn.

Trả lời

4

Tôi khuyên bạn không nên tự mình phân tích cú pháp các ngày như thế này, đặc biệt là bằng cách cố gắng tìm ra một hoặc hai regex. Có rất nhiều mô-đun perl hiện có để thực hiện việc này, chẳng hạn như Date::Manip. Nhiều tùy chọn của bạn được bao gồm hợp lý in this article.

+2

+1 cho 'Ngày tháng :: Manip'. Tốt nhất để sử dụng một thư viện được thiết kế cho mục đích như trái ngược với cố gắng để trang trải mọi trường hợp cạnh mình. –

+0

Máy chủ web của tôi không có Ngày tháng :: Manip và tôi không có quyền cài đặt mô-đun này: (.. đó là lý do tại sao tôi đang tìm giải pháp regex. – simbatish

+0

@sim Bạn có cài đặt DateTime không? – TLP

2

Thời gian :: Mảnh đã là một mô-đun cốt lõi trong một thời gian dài, nó có khả năng phân tích chuỗi thành đối tượng Time :: Piece, sau đó có thể định dạng cho bạn ở 10 định dạng khác nhau. Nếu Time :: Piece không được cài đặt, bạn có thể thử tìm kiếm một số hàng trăm mô-đun thời gian khác mà bạn có thể thấy được liệt kê trên cpan. (sử dụng một lớp lót: perl -e "sử dụng Module :: IHope :: IsHere || die \ 'Không tìm thấy \'").

`Time::Piece->strptime(STRING, FORMAT) 
         # see strptime man page. Creates a new 
         # Time::Piece object` 

Nếu không, tôi sẽ bắt đầu cài đặt mô-đun trong thư mục chính của mình.

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