我没有意识到这一点,但显然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年以前的日期。我只想用一下,但是变化太大了。换句话说,它可能有微秒,也可能没有时区。有什么解决办法吗?如果有什么不同,我会这样做,这样我就可以将数据写入文本文件,并使用OracleSQL*加载程序将其加载到数据库中。
我最终做了亚历克斯·马泰利的回答。下面是一个更完整的实现:
>>> from datetime import datetime
>>> d = datetime.now()
>>> d = d.replace(microsecond=0, tzinfo=None)
>>> str(d)
'2009-10-29 11:27:27'
唯一的区别是,
str
相当于str(d)
。 最佳答案
isoformat在datetime
实例上工作,无范围限制:
>>> import datetime
>>> x=datetime.datetime(1865, 7, 2, 9, 30, 21)
>>> x.isoformat()
'1865-07-02T09:30:21'
如果您需要一个不同的格式字符串,那么从
isoformat
中得到的字符串片段进行切片、切块和重新混合并不难,这非常一致(如果微秒为零,则省略点和后面的微秒)。