我之前没有意识到,但显然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(' ')
。