EXCELの日付項目のシリアル値は変

休み明けのダルさが抜けないbonlifeです。気になる記事があったので調べてみました。

EXCELとPythonの日付が一日ずれる?

そうなんです。今まで全く気付きませんでしたが、EXCELがオカシイんです。

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に引きずられてこの仕様ってのもちょっとね…。