python中date用法_Python教程--date 对象用法

时间:2025-03-03 07:02:00

date 对象

date 对象代表一个理想化历法中的日期(年、月和日),即当今的格列高利历向前后两个方向无限延伸。

公元 1 年 1 月 1日是第 1 日,公元 1 年 1 月 2 日是第 2 日,依此类推。 2

class (year, month, day)

所有参数都是必要的。 参数必须是在下面范围内的整数:

MINYEAR <= year <= MAXYEAR

1 <= month <= 12

1 <= 日期 <= 给定年月对应的天数

如果参数不在这些范围内,则抛出 ValueError 异常。

其它构造器,所有的类方法:

classmethod ()

返回当前的本地日期。

这等价于 (())。

classmethod (timestamp)

返回对应于 POSIX 时间戳的当地时间,例如 () 返回的就是时间戳。

这可能引发 OverflowError,如果时间戳数值超出所在平台 C localtime() 函数的支持范围的话,并且会在 localtime() 出错时引发 OSError。 通常该数值会被限制在 1970 年至 2038 年之间。 请注意在时间戳概念包含闰秒的非 POSIX 系统上,闰秒会被 fromtimestamp() 所忽略。

在 3.3 版更改: 引发 OverflowError 而不是 ValueError,如果时间戳数值超出所在平台 C localtime() 函数的支持范围的话,并会在 localtime() 出错时引发 OSError 而不是 ValueError。

classmethod (ordinal)

返回对应于预期格列高利历序号的日期,其中公元 1 年 1 月 1 晶的序号为 1。

除非 1 <= ordinal <= () 否则会引发 ValueError。对于任意日期 d,(()) == d。

classmethod (date_string)

返回一个对应于以 YYYY-MM-DD 格式给出的 date_string 的 date 对象:

>>>

>>> from datetime import date

>>> ('2019-12-04')

(2019, 12, 4)

这是 () 的逆操作。 它只支持 YYYY-MM-DD 格式。

3.7 新版功能.

classmethod (year, week, day)

返回指定 year, week 和 day 所对应 ISO 历法日期的 date。 这是函数 () 的逆操作。

3.8 新版功能.

类属性:

最小的日期 date(MINYEAR, 1, 1) 。

最大的日期 ,date(MAXYEAR, 12, 31)。

两个日期对象的最小间隔,timedelta(days=1)。

实例属性(只读):

在 MINYEAR 和 MAXYEAR 之间,包含边界。

1 至 12(含)

返回1到指定年月的天数间的数字。

支持的运算:

运算

结果:

date2 = date1 + timedelta

date2 等于从 date1 减去 天。 (1)

date2 = date1 - timedelta

计算 date2 的值使得 date2 + timedelta == date1。 (2)

timedelta = date1 - date2

(3)

date1 < date2

如果 date1 的时间在 date2 之前则认为 date1 小于 date2 。 (4)

注释:

如果 > 0 则 date2 将在时间线上前进,如果 < 0 则将后退。 操作完成后 date2 - date1 == 。 和 会被忽略。 如果 将小于 MINYEAR 或大于 MAXYEAR 则会引发 OverflowError。

和 会被忽略。

此值完全精确且不会溢出。 操作完成后 和 均为 0,并且 date2 + timedelta == date1。

换句话说,当且仅当 () < () 时 date1 < date2。 日期比较会引发 TypeError,如果比较目标不为 date 对象的话。 不过也可能会返回 NotImplemented,如果比较目标具有 timetuple() 属性的话。 这个钩子给予其他日期对象类型实现混合类型比较的机会。 否则,当 date 对象与不同类型的对象比较时将会引发 TypeError,除非是 == 或 != 比较。 后两种情况将分别返回 False 或 True。

在布尔运算中,所有 date 对象都会被视为真值。

实例方法:

(year=, month=, day=)

返回一个具有同样值的日期,除非通过任何关键字参数给出了某些形参的新值。

示例:

>>>

>>> from datetime import date

>>> d = date(2002, 12, 31)

>>> (day=26)

(2002, 12, 26)

()

返回一个 time.struct_time,即 () 所返回的类型。

hours, minutes 和 seconds 值均为 0,且 DST 旗标值为 -1。

() 等价于:

time.struct_time((, , , 0, 0, 0, (), yday, -1))

其中 yday = () - date(, 1, 1).toordinal() + 1 是当前年份中的日期序号,1 月 1 日的序号为 1。

()

返回日期的预期格列高利历序号,其中公元 1 年 1 月 1 日的序号为 1。 对于任意 date 对象 d,(()) == d。

()

返回一个整数代表星期几,星期一为0,星期天为6。例如, date(2002, 12, 4).weekday() == 2,表示的是星期三。参阅 isoweekday()。

()

返回一个整数代表星期几,星期一为1,星期天为7。例如:date(2002, 12, 4).isoweekday() == 3,表示星期三。参见 weekday(), isocalendar()。

()

返回一个三元元组,(ISO year, ISO week number, ISO weekday) 。

ISO 历法是一种被广泛使用的格列高利历。 3

ISO 年由 52 或 53 个完整星期构成,每个星期开始于星期一结束于星期日。 一个 ISO 年的第一个星期就是(格列高利)历法的一年中第一个包含星期四的星期。 这被称为 1 号星期,这个星期四所在的 ISO 年与其所在的格列高利年相同。

例如,2004 年的第一天是星期四,因此 ISO 2004 年的第一个星期开始于 2003 年 12 月 29 日星期一,结束于 2004 年 1 月 4 日星期日:

>>>

>>> from datetime import date

>>> date(2003, 12, 29).isocalendar()

(2004, 1, 1)

>>> date(2004, 1, 4).isocalendar()

(2004, 1, 7)

()

返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串:

>>>

>>> from datetime import date

>>> date(2002, 12, 4).isoformat()

'2002-12-04'

这是 () 的逆操作。

()

对于日期对象 d, str(d) 等价于 () 。

()

返回一个表示日期的字符串:

>>>

>>> from datetime import date

>>> date(2002, 12, 4).ctime()

'Wed Dec 4 00:00:00 2002'

() 等效于:

((()))

在原生 C ctime() 函数 (() 会发起调用该函数,但 () 则不会) 遵循 C 标准的平台上。

(format)

返回一个由显式格式字符串所指明的代表日期的字符串。 表示时、分或秒的格式代码值将为 0。 要获取格式指令的完整列表请参阅 strftime() 和 strptime() 的行为。

(format)

与 () 相同。 此方法使得为 date 对象指定以 格式化字符串字面值 表示的格式化字符串以及使用 () 进行格式化成为可能。 要获取格式指令的完整列表,请参阅 strftime() 和 strptime() 的行为。

class:date 用法示例

计算距离特定事件天数的例子:

>>>

>>> import time

>>> from datetime import date

>>> today = ()

>>> today

(2007, 12, 5)

>>> today == (())

True

>>> my_birthday = date(, 6, 24)

>>> if my_birthday < today:

... my_birthday = my_birthday.replace(year= + 1)

>>> my_birthday

(2008, 6, 24)

>>> time_to_birthday = abs(my_birthday - today)

>>> time_to_birthday.days

202

使用 date 的更多例子:

>>> from datetime import date

>>> d = (730920) # 730920th day after 1. 1. 0001

>>> d

(2002, 3, 11)

>>> # Methods related to formatting string output

>>> ()

'2002-03-11'

>>> ("%d/%m/%y")

'11/03/02'

>>> ("%A %d. %B %Y")

'Monday 11. March 2002'

>>> ()

'Mon Mar 11 00:00:00 2002'

>>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")

'The day is 11, the month is March.'

>>> # Methods for to extracting 'components' under different calendars

>>> t = ()

>>> for i in t:

... print(i)

2002 # year

3 # month

11 # day

0

0

0

0 # weekday (0 = Monday)

70 # 70th day in the year

-1

>>> ic = ()

>>> for i in ic:

... print(i)

2002 # ISO year

11 # ISO week number

1 # ISO day number ( 1 = Monday )

>>> # A date object is immutable; all operations produce a new object

>>> (year=2005)

(2005, 3, 11)