xldate_as_tuple
宣伝どおりに機能し、(年、月、日、時、分、秒) タプルを生成します。問題は、そのタプルで何をしているのかにあり、あなたの場合、年、月、日のそれぞれが 0 になります。
簡潔な答え:
時間値が必要な場合はdatetime.time
、 ではなくを呼び出しますdatetime.datetime
。
長い答え:
エクセルを開きます。セル 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 桁の数値として書式設定します。0.699305556
C1 と D1 の両方に表示されるはずです。
起動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)]
>>>
1 日の一部をモジュール領域に入れる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