xldate_as_tuple
像宣傳的那樣,生產(年,月,一天,小時,分鐘,秒)元組。問題在於你正在用這個元組做什麼,在你的情況下,每年,每月和每天都會有0。
簡短的回答:
如果你想有一個時間值,通話datetime.time
,不datetime.datetime
。
長答案:
打開Excel。進入單元格A1,輸入16:47:00
。將其複製到B1和C1中。格式B1,自定義格式yyyy-mm-dd hh:mm:ss
。你應該看到1900-01-00 16:47:00
。進入單元D1型=(16+47/60)/24
,然後將C1和D1格式化爲8位小數位數。您應該在C1和D1中看到0.699305556
。
火起來xlrd
,並嘗試xlrd.xldate_as_tuple
:
>>> import xlrd
>>> b = xlrd.open_workbook('xlrd_time.xls')
>>> s = b.sheet_by_index(0)
>>> s.row_values(0)
[0.6993055555555556, 0.6993055555555556, 0.6993055555555556, 0.6993055555555556]
>>> [xlrd.xldate_as_tuple(t, 0) for t in s.row_values(0)]
[(0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0), (0, 0, 0, 16, 47, 0)]
>>>
讓您的幾分之一個天爲datetime
模塊境內:您的數據是一個時間的日或持續時間(「timedelta」 ),所以:
>>> import datetime
>>> t = (16 + 47/60.)/24
>>> t
0.6993055555555556
>>> datetime.timedelta(days=t)
datetime.timedelta(0, 60420)
>>> x = xlrd.xldate_as_tuple(t, 0)
>>> x
(0, 0, 0, 16, 47, 0)
>>> datetime.time(*x[3:])
datetime.time(16, 47)
您的數據不是「日期時間」;試圖做一個日期時間將失敗,因爲你已經發現:
>>> datetime.datetime(*x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year is out of range