2010-06-24 58 views
7

Cho một chuỗi đại diện cho ngày/giờ theo định dạng ISO8601 (ví dụ: 20100723T073000), tôi cần phân tích cú pháp này thành định dạng do người dùng cung cấp bằng chuỗi định dạng chung strftime. Để thực hiện điều đó, tôi cần chuyển đổi dấu thời gian ISO8601 thành dấu thời gian Unix. Có một số lượng lớn các mô-đun thao tác ngày/giờ cho Perl và tôi hơi bị choáng ngợp. Có bất cứ đề nghị nào cho việc làm như thế này hả?Làm thế nào tôi có thể chuyển đổi một dấu thời gian ISO8601 thành thời gian unix trong Perl?

Trả lời

13

Mô-đun vô địch để xử lý ngày, giờ, khoảng thời gian, múi giờ và định dạng là DateTime. Khi bạn đã có đối tượng DateTime của mình, bạn có thể thực hiện một số lượng lớn các thao tác trên nó, như thêm/bớt các đối tượng DateTime khác hoặc các đối tượng DateTime::Duration hoặc in ra ở định dạng khác.

use strict; use warnings; 
use DateTime; 
use DateTime::Format::ISO8601; 

my $dt = DateTime::Format::ISO8601->parse_datetime('20100723T073000'); 

print $dt->strftime('%F %T'); 

in: "2010/07/23 07:30:00"

4

Nếu bạn không có hoặc không muốn cài đặt các module DateTime::Format::ISO8601, bạn có thể phân tích ít nhất là một tập hợp con của ISO8601 với HTTP::Date:

$ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")' 
1385845503 

Như với bất kỳ xử lý ngày nào, hãy thận trọng về các vấn đề múi giờ.

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