我没有意识到这一点,但显然是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 将其加载到数据库中。
我基本上最终完成了亚历克斯·马泰利的回答。这是一个更完整的实现:
>>> 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(' ')
.
等格式 http://docs.python.org/library/datetime.html?highlight=isoformat#datetime.datetime.isoformat致力于datetime
没有范围限制的实例:
>>> import datetime
>>> x=datetime.datetime(1865, 7, 2, 9, 30, 21)
>>> x.isoformat()
'1865-07-02T09:30:21'
如果您需要不同格式的字符串,那么对您获得的字符串进行切片、切块和重新混合并不难isoformat
,这是非常一致的(YYYY-MM-DDTHH:MM:SS.mmmmmm
,如果微秒为零,则省略点和后面的微秒)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)