python の xlrd などでエクセルファイルを読み込むと、エクセル上で表示されていた日付が、41496 などの 5 桁の謎の数値に代わっている。
これは、エクセルでは日付は 1900 年 1 月 1 日を起点 (1 日目) として、そこから日数を加算した数値で日付データを保持しているためらしい。
- 例えば 2017 年 5 月 29 日では 42884 。1900 年 1 月 1 日から 42884 日経過しているらしい。
- (ちなみに 1800 年とかエクセルに入れると数値変換されない。マイナスとかにならなんだ)
この数値を python で日付形式に変換するには、timedelta を用いて次のように加算すればよい. num にはエクセルの数値を代入する
def excel_date(num):
from datetime import datetime, timedelta
return(datetime(1899, 12, 30) + timedelta(days=num))
例えば、41496 を入れると、2013 年 8 月 10日の datetime が返される。
excel_date(41946)
> datetime.datetime(2013, 8, 10, 0, 0)