私はこれに気づきませんでしたが、明らかに Python のstrftime
関数は 1900 年より前の日付をサポートしていません:
>>> from datetime import datetime
>>> d = datetime(1899, 1, 1)
>>> d.strftime('%Y-%m-%d')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: year=1899 is before 1900; the datetime strftime() methods require year >= 1900
これを行うために自分で何かをハックできると確信していますが、このstrftime
関数には理由があると思います (また、1900 年より前の日付をサポートできない理由もあります)。1900 年より前の日付をサポートできるようにする必要str
があります。つまり、マイクロ秒がある場合とない場合、またはタイムゾーンがある場合とない場合があります。これに対する解決策はありますか?
違いがある場合は、データをテキスト ファイルに書き込んで、Oracle SQL*Loader を使用してデータベースにロードできるように、これを行っています。
私は基本的にAlex Martelliの答えをやることになりました。より完全な実装を次に示します。
>>> from datetime import datetime
>>> d = datetime.now()
>>> d = d.replace(microsecond=0, tzinfo=None)
>>> str(d)
'2009-10-29 11:27:27'
唯一の違いは、str(d)
と同等であることd.isoformat(' ')
です。