Jas*_*ker 19 python oracle datetime strftime sql-loader
我没有意识到这一点,但显然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
Run Code Online (Sandbox Code Playgroud)
我确信我可以自己做一些事情来做这件事,但我认为这个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'
Run Code Online (Sandbox Code Playgroud)
唯一的区别str(d)是相当于d.isoformat(' ').
Ale*_*lli 15
isoformat适用于datetime没有范围限制的实例:
>>> import datetime
>>> x=datetime.datetime(1865, 7, 2, 9, 30, 21)
>>> x.isoformat()
'1865-07-02T09:30:21'
Run Code Online (Sandbox Code Playgroud)
如果你需要一个不同的格式字符串这不是太难切片,切块和你得到字符串的混音作品isoformat,这是非常一致(YYYY-MM-DDTHH:MM:SS.mmmmmm与点遗漏了以下微秒如果微秒为0).
Dav*_*ebb 11
工作年限的确切范围
strftime()也因平台而异.无论平台如何,1900年前都无法使用.
所以不会有一个使用的解决方案strftime().幸运的是,"手动"执行此操作非常简单:
>>> "%02d-%02d-%02d %02d:%02d" % (d.year,d.month,d.day,d.hour,d.minute)
'1899-01-01 00:00'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6206 次 |
| 最近记录: |