2010-03-04 73 views
15

Tôi có một ngày ở định dạng YYYYMMDD và một thời gian ở định dạng HHMMSS dưới dạng chuỗi trong phần tử thứ 4 và thứ 5 trong danh sách. IE:Chuyển đổi ngày/giờ theo định dạng YYYYMMDD/HHMMSS sang ngày giờ Python

data[4] = '20100304' 
data[5] = '082835' 

tôi đang tạo ra một thể hiện của datetime (trong một lĩnh vực tên tạo ra) như thế này:

generatedtime = datetime.datetime(int(data[4][:4]),int(data[4][4:6]),int(data[4][6:]),int(data[5][:2]),int(data[5][2:4]),int(data[5][4:6])) 

Cho rằng các định dạng đầu vào không thể thay đổi, là có một cách sạch hơn tôi nên tạo ví dụ của tôi về đối tượng datetime?

+1

Mã của bạn, trong khi khó xử tìm kiếm, công việc có độc đáo không. –

Trả lời

35

Không cần nhập time; datetime.datetime.strptime có thể tự làm.

import datetime 
dt=datetime.datetime.strptime(data[4]+data[5],'%Y%m%d%H%M%S') 
print(dt) 
# 2010-03-04 08:28:35 

Để biết thông tin về các mã định dạng (ví dụ %Y%m%d%H%M%S) có sẵn, xem docs cho strftime.

+1

Nếu dấu thời gian không được chỉ định, thời gian sẽ được coi là giờ địa phương. Ví dụ sau chuyển đổi thời gian UTC thành dấu thời gian Unix: 'datetime.datetime.strptime (timeval,"% Y% m% d% H% M% S "). Thay thế (tzinfo = datetime.timezone.utc) .timestamp() '(Tôi thực sự sử dụng điều này để phân tích cú pháp phản hồi MDTM FTP) – Lekensteyn

4

Bạn có thể xem time.strptime.

import time 
time.strptime('20100304 082835', '%Y%m%d %H%M%S') 

Ở trên giả sử đồng hồ 24 giờ (%H). Sử dụng %I thay vào đó nếu sử dụng đồng hồ 12 giờ.

Đối với một danh sách đầy đủ của các chỉ thị định dạng có sẵn, hãy kiểm tra các tài liệu cho time.strftime

0
import time, datetime 

x = time.strptime("30 Nov 00", "%d %b %y") 
datetime.datetime(x) 

Bạn cũng có thể cung cấp format riêng của chuỗi ngày, đây là doc.

0

Bạn có thể dọn dẹp mã hiện tại của bạn một chút với một máy phát điện (tương đương với một bản đồ):

generatedtime = datetime.datetime(*(int(x) for x in 
    (data[4][:4], data[4][4:6], data[4][6:], data[5][:2], data[5][2:4],data[5][4:6]) 
    )) 

hoặc thậm chí, nếu bạn đang điên như một con cáo, bạn có thể làm báo cáo kết quả datetime thậm chí sạch hơn (với chi phí thêm một đường vô lý):

slices = ((4, slice(4)), (4, slice(4,6)), (4, slice(6,None)), (5, slice(2)), (5, slice(2,4)), (5, slice(4,6))) 
generatedtime = datetime.datetime(*(int(data[i][s]) for (i,s) in slices)) 
Các vấn đề liên quan