2011-07-15 31 views
11

Có thể cho tôi biết cách lấy datetime từ float trong python không?Tìm nạp datetime từ phao và ngược lại trong python

Ví dụ: tôi có số phao như giả sử 43111.0, bây giờ tôi muốn lấy datetime cho việc này.

+3

gì là 43.111,0 nghĩa vụ phải được? Đó có phải là một số dấu thời gian phi tiêu chuẩn không? – Jacob

+1

43111 là định dạng số cho ngày 11 tháng 1 năm 2018. – Pravin

+1

Bạn có đặc điểm kỹ thuật hay gì đó cho việc này không? – Jacob

Trả lời

5
import datetime, time 

print datetime.datetime.fromtimestamp(time.time()) 
print datetime.datetime.fromtimestamp(43111.0) 
+0

Cảm ơn câu trả lời của bạn nhưng 43111.0 không phải là dấu thời gian, đó là định dạng số flaot cho ngày 11 tháng 1 năm 2018. – Pravin

5

Như vậy, với một chút toán:

Nếu 43.111 là ngày 11 Tháng 1 năm 2018, sau đó 0 là ngày 30 tháng 12 năm 1899. Python đã datetime.date.fromordinal()

Return ngày tương ứng với Gregorian proleptic thứ tự, trong đó ngày 1 tháng 1 của năm thứ 1 có thứ tự 1. ValueError được tăng trừ khi 1 < = thứ tự < = date.max.toordinal(). Đối với bất kỳ ngày nào d, ngày.fromordinal (d.toordinal()) == d.

Nếu bạn sử dụng với một bù đắp, bạn có:

>>> dateoffset = 693594 
>>> datetime.date.fromordinal(dateoffset + 43111) 
datetime.date(2018, 1, 11) 

Hy vọng rằng sẽ giúp, thậm chí nếu nó không hoạt động cho nổi.

+0

Nó hoạt động trên Pythons cũ hơn. ;) –

+0

Người ta phải xử lý một phần phân đoạn riêng biệt nếu số thứ tự được sử dụng: ( – mlt

20

Có vẻ như định dạng ngày giờ trong Excel, được gọi là serial date. Nhanh chóng và cách bẩn để chuyển đổi nó:

>>> import datetime 
>>> serial = 43111.0 
>>> seconds = (serial - 25569) * 86400.0 
>>> datetime.datetime.utcfromtimestamp(seconds) 
datetime.datetime(2018, 1, 11, 0, 0) 
+0

Theo ý kiến ​​của tôi, điều này không quá bẩn, vì ngày tháng Excel thực sự chỉ là dấu thời gian với một điểm bắt đầu khác. 1) fromtimestamp() bao gồm thông tin múi giờ, có thể hoặc không được mong muốn (tôi thường đoán là không mong muốn - chú ý đến 2, 0 ở cuối kết quả của bạn). Để loại bỏ điều này, hãy sử dụng utcfromtimestamp() để thay thế. (2) Phương pháp này không thể hỗ trợ các ngày trước năm 1970. –

+0

Đã chỉnh sửa câu trả lời của tôi để sử dụng utcfromtimestamp() :) – tuomur

1

Hãy thử điều này:

from datetime import datetime 

datetime.fromtimestamp(*your_timestamp_here*).strftime('%Y-%m-%d') 
Các vấn đề liên quan