2012-10-07 39 views
5

Tôi có một số ngày có định dạng là d/m/yyyy (ví dụ: 2/28/1987). Tôi muốn có nó trong định dạng ISO: 1987-02-28Tôi có thể định dạng ngày bằng ISO bằng cách sử dụng Python như thế nào?

Tôi nghĩ rằng chúng ta có thể làm điều đó theo cách đó, nhưng có vẻ như một chút nặng:

str_date = '2/28/1987' 
arr_str = re.split('/', str_date) 
iso_date = arr_str[2]+'-'+arr_str[0][:2]+'-'+arr_str[1] 

Có một cách khác để làm nó với Python?

+0

Tôi có danh sách khổng lồ trong số các ngày như vậy, tùy chọn đầu tiên của tôi là sao chép/dán trong trình chỉnh sửa bảng tính như LibreOffice và thay đổi ô định dạng trong o rder để thiết lập định dạng phù hợp nhưng không hoạt động .. – Reveclair

Trả lời

17

Bạn có thể sử dụng datetime module:

datetime.datetime.strptime(str_date, '%m/%d/%Y').date().isoformat() 

hoặc, như mã chạy:

>>> import datetime 
>>> str_date = '2/28/1987' 
>>> datetime.datetime.strptime(str_date, '%m/%d/%Y').date().isoformat() 
'1987-02-28' 
+2

+1 cho 'isoformat()'. Tôi không bao giờ biết về điều đó. – Blender

1

gì bạn có là rất gần thế nào tôi sẽ viết nó, chỉ có sự cải thiện lớn tôi có thể đề nghị là sử dụng đồng bằng cũ split thay vì re.split, vì bạn không cần một biểu thức chính quy:

arr_str = str_date.split('/') 

Nếu bạn cần thiết để làm bất cứ điều gì phức tạp hơn như vậy tôi sẽ khuyên bạn nên time.strftime, nhưng đó là đáng kể hơn đắt hơn bashing chuỗi.

6

Tôi sẽ sử dụng các mô-đun datetime để phân tích nó:

>>> from datetime import datetime 
>>> date = datetime.strptime('2/28/1987', '%m/%d/%Y') 
>>> date.strftime('%Y-%m-%d') 
'1987-02-28' 
+0

'.isoformat()' trên các ngày sử dụng cùng một chuỗi định dạng OOTB. :-) –

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