EXCELの日付項目のシリアル値は変
休み明けのダルさが抜けないbonlifeです。気になる記事があったので調べてみました。
EXCELとPythonの日付が一日ずれる?
そうなんです。今まで全く気付きませんでしたが、EXCELがオカシイんです。
- Microsoft Excel - Wikipedia (日付の変換問題)
1900年2月29日って、なんぞこれ。Pythonで扱おうとする場合、処理に一工夫必要ですね。
import datetime def get_date_from_excel_serial(n): if n < 60: return datetime.date(1900,1,1) + datetime.timedelta(n-1) elif n >= 61: return datetime.date(1900,1,1) + datetime.timedelta(n-2) else: return None
こんな感じの関数を作っておけばOK。
In [20]: for i in range(50,70): ....: print i, get_date_from_excel_serial(i) ....: 50 1900-02-19 51 1900-02-20 52 1900-02-21 53 1900-02-22 54 1900-02-23 55 1900-02-24 56 1900-02-25 57 1900-02-26 58 1900-02-27 59 1900-02-28 60 None 61 1900-03-01 62 1900-03-02 63 1900-03-03 64 1900-03-04 65 1900-03-05 66 1900-03-06 67 1900-03-07 68 1900-03-08 69 1900-03-09
互換性は大切ですが、Lotus 1-2-3に引きずられてこの仕様ってのもちょっとね…。