如何在 python 中使用 strftime() 格式化 '0000-00-00 00:00:00'?

How to format '0000-00-00 00:00:00' using strftime() in python?

格式化日期为:

dob = datetime(0000, 00, 00)
dob = dob.strftime("%Y-%m-%d")

但它给出错误:ValueError: year is out of range

如何使用 python 中的 strftime() 格式化 datetime(0000,00,00)

您不能使用值为 0 的 year/month/day。

dob = datetime(1989, 1, 1)
dob = dob.strftime("%Y-%m-%d")

'1989-01-01'

Python 的 documentation on the datetime module,特别是 datetime class 声明 datetime 对象可以具有以下范围内的属性值:

MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= number of days in the given month and year
0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000

该模块还定义了以下常量:

datetime.MINYEAR

The smallest year number allowed in a date or datetime object. MINYEAR is 1.

datetime.MAXYEAR

The largest year number allowed in a date or datetime object. MAXYEAR is 9999.

这意味着您不能在 datetime class 的构造函数中使用那些 (datetime(0000, 00, 00)) 参数,因此 ValueError 表明给定的年份已经结束范围

因为你不能首先用下面的参数构造一个 datetime 对象,所以没有办法调用它的 strftime 方法。

超出范围 - 没有 year 0 in the Common Era, nor a month or day zero in the Gregorian calendar. Beyond that, if time_t is 32-bit you might not be able to process years before 1902 (a property of Unix time)。

如果您真的想生成一个包含零的字符串作为格式的示例,您可以生成一个带有一些有效日期(例如 99-09-09)并将数字替换为零的字符串。

一般来说,我更喜欢示例日期,您可以从中根据字段值推断字段,例如 1980-10-30。这不会为混淆日期和月份留下空间。

日期、月份和年份不能为 0。如果您希望提供某种默认值,请考虑为其提供回溯日期,例如 1970 年 1 月 1 日或任何其他年份在 1-9999 范围内的日期,日期在范围 1-30(28、29、31 视情况而定)和月份范围 1-12