2016-07-20 2 views
0

私はPythonでExcelファイルから受け取ったデータを解析しようとしています。このため私はxlrdライブラリを使用しています。私は値が5/16/2016 12:15であるExcelにセルを持っていて、Pythonでそれを42506.6493として受け取っています。 Excelは1900年1月1日以降の日数として日付を保存することを理解します。私はの値を読むときしかし日付変換Python DatetimeとExcelの違い

orgDate = datetime.datetime(1900,1,1,0,0,0,0) 
xlVal = 42506.6493 
newDate = orgDate + datetime.timedelta(days=int(xlVal)) 

:だからPythonで、私は以下のコードを使用して、同じ日付を取得するには(時間を表す割合せずに今のわずか数日)の日のこの番号を追加しようとしていますnewDate私はそれがdatetime.datetime(2016, 5, 18, 0, 0)であるのに対し、それは5月16日ではないはずです。誰もこれをどう扱うかを知っていますか?

+0

私はPythonの開発者ではありませんが、値を整数に丸めてint()しませんか?だからあなたの割合 ".6493"は "+1"に切り上げられます。つまり、42506は42507になりますか? – Andreas

+0

私は上記の場合、1日の差分が正しいです。それはおそらく、エクセルの0日目が1日目のpythonであるからでしょうか?だから1900-01-01 12:00は "0.5"をエクセルしていますが、Pythonの日時 "1.5"では何ですか? – Andreas

+0

こんにちはアンドレアス。いいえ、int(x.y)はxを返します。 2日差(18 - > 16)もあります。 – Y2H

答えて

1

xlrd documentation、特にdates in Excelのセクションを参照してください。

日付は実際には1900-01-01で開始されません。 (1)Excelは、1900年をうるう年と見なすLotus 1-2-3のバグを保存しています。(2)日付が1900-01-01で始まったとしても、1900年から01年になるでしょう。 -01日目、0日目ではないので、それに応じてタイムデルタを調整する必要があります。

しかし実際には、問題を解決してxlrdの組み込み日付機能xldate_as_tupleまたはxldate_as_datetimeを使用してください。

+0

ええ、最後に 'xldate_au_tuple'を使ってしまいました。しかし、あなたの説明はとても役に立ちます。ありがとう、私はあなたに最高の答えを与えるよ! – Y2H

関連する問題