python - 有没有办法在 Python 中对 1900 年之前的日期使用类似 strftime 的函数?

标签 python oracle datetime sql-loader strftime

我没有意识到这一点,但显然 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 函数的存在是有原因的(还有一个原因是它不能支持 pre- 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(' ')

最佳答案

isoformat适用于没有范围限制的 datetime 实例:

>>> import datetime
>>> x=datetime.datetime(1865, 7, 2, 9, 30, 21)
>>> x.isoformat()
'1865-07-02T09:30:21'

如果您需要不同格式的字符串,对从 isoformat 获得的字符串片段进行切片、切 block 和重新混合并不难,这非常一致(YYYY-MM-DDTHH :MM:SS.mmmmmm,如果微秒为零,则省略点和后面的微秒)。

关于python - 有没有办法在 Python 中对 1900 年之前的日期使用类似 strftime 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1643967/

相关文章:

javascript - django 上找不到页面(404)错误

Oracle 11g - 阶乘不适用于大数

java - 如何使用 Oracle DB 在 Spring/mybatis 应用程序中设置默认模式?

oracle - 如何在 Oracle 中选择 BLOB 字段的一部分?

c# - DateTime.ToUniversalTime() 如何工作?

python - 将 python 代码迁移到 pypy 或更多关于 future 可靠的东西

python - 将值插入 numpy 数组

python - Keras,如何使用移除最后一层的模型进行预测

java - 解析月份不带前导 0 的日期

php - Mysql 查询用于计算具有特定天数差异的行数