datetime基本日期和时间类型的date类详解(22) – Python语言(必读进阶学习教程)(参考资料)
对象表示理想化日历中的date
日期(年、月和日),当前的公历在两个方向上无限延伸。第 1 年的 1 月 1 日称为第 1 天,第 1 年的 1 月 2 日称为第 2 天,依此类推。这与 Dershowitz 和 Reingold 的书 Calendrical Calculations 中的“预期公历”定义相匹配,它是所有计算的基准日历。有关在预测公历和许多其他日历系统之间转换的算法,请参阅本书。
- class
datetime.
yeardate(
month,
day,
)
- 所有参数都是必需的。参数必须是以下范围内的整数:
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= number of days in the given month and year
如果给出了超出这些范围的参数,
ValueError
则引发。
其他构造函数,所有类方法:
- classmethod
date.
today()
- 返回当前的本地日期。这相当于
date.fromtimestamp(time.time())
.
- classmethod
date.
timestampfromtimestamp(
)
- 返回 POSIX 时间戳对应的本地日期,如
time.time()
.OverflowError
如果时间戳超出平台 Clocaltime()
函数支持的值范围并且失败OSError
,这可能会引发。localtime()
这通常被限制在从 1970 年到 2038 年的年份。请注意,在时间戳概念中包含闰秒的非 POSIX 系统上,闰秒会被fromtimestamp()
.在 3.3 版更改:如果时间戳超出平台 C 函数支持的值范围,则引发
OverflowError
而不是。提高而不是 失败。ValueError
localtime()
OSError
ValueError
localtime()
- classmethod
date.
ordinalfromordinal(
)
- 返回对应于预测的公历序数的日期,其中第 1 年的 1 月 1 日有序数 1.
ValueError
除非. 对于任何日期d , .1 <= ordinal <= date.max.toordinal()
date.fromordinal(d.toordinal()) == d
- classmethod
date.
date_stringfromisoformat(
)
- 以 .发出的格式返回
date
对应于date_stringdate.isoformat()
的。具体来说,此函数支持 format(s) 格式的字符串YYYY-MM-DD
。警告
这不支持解析任意 ISO 8601 字符串 – 它仅用作
date.isoformat()
.3.7 版中的新功能。
类属性:
date.
min
- 最早的可表示日期.
date(MINYEAR, 1, 1)
date.
max
- 可代表的最新日期.
date(MAXYEAR, 12, 31)
date.
resolution
- 不相等的日期对象之间的最小可能差异,
timedelta(days=1)
.
实例属性(只读):
date.
year
- 介于
MINYEAR
和MAXYEAR
包容之间。
date.
month
- 介于 1 和 12 之间。
date.
day
- 介于 1 和给定年份的给定月份的天数之间。
支持的操作:
操作 | 结果 |
---|---|
date2 = date1 + timedelta |
date2是timedelta.days 从date1中删除的天数。(1) |
date2 = date1 - timedelta |
计算date2使得. (2)date2 + timedelta == date1 |
timedelta = date1 - date2 |
(3) |
date1 < date2 |
当 date1在时间上早于date2时, date1被认为小于date2。(4) |
笔记:
- 如果 ,则date2及时向前移动,如果 则向后 移动。之后。 并被忽略。 如果小于 或大于 ,则引发。
timedelta.days > 0
timedelta.days < 0
date2 - date1 == timedelta.days
timedelta.seconds
timedelta.microseconds
OverflowError
date2.year
MINYEAR
MAXYEAR
timedelta.seconds
并被timedelta.microseconds
忽略。- 这是准确的,不能溢出。timedelta.seconds 和 timedelta.microseconds 为 0,而 date2 + timedelta == date1 之后。
- 换句话说,当且仅当。如果另一个比较对象也不是对象,则会引发日期比较。但是, 如果另一个比较具有 属性,则返回。这个钩子为其他类型的日期对象提供了实现混合类型比较的机会。如果不是,则在将 对象与不同类型的对象进行比较时,将引发,除非比较是or 。后一种情况分别返回 or 。
date1 < date2
date1.toordinal() < date2.toordinal()
TypeError
date
NotImplemented
timetuple()
date
TypeError
==
!=
False
True
日期可以用作字典键。在布尔上下文中,所有date
对象都被认为是真实的。
实例方法:
date.
year=self.yearreplace(
month=self.month,
day=self.day,
)
- 返回具有相同值的日期,除了那些由指定的关键字参数赋予新值的参数。例如,如果,那么。
d == date(2002, 12, 31)
d.replace(day=26) == date(2002, 12, 26)
date.
timetuple()
- 返回一个
time.struct_time
如返回的time.localtime()
。小时、分钟和秒为 0,DST 标志为 -1。d.timetuple()
相当于,其中是从1 月 1日开始的当年中的天数 。time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))
yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1
1
date.
toordinal()
- 返回日期的预测公历序数,其中第 1 年的 1 月 1 日的序数为 1。对于任何
date
对象d, .date.fromordinal(d.toordinal()) == d
date.
weekday()
- 以整数形式返回星期几,其中星期一为 0,星期日为 6。例如,星期三。另请参阅 。
date(2002, 12, 4).weekday() == 2
isoweekday()
date.
isoweekday()
- 以整数形式返回星期几,其中星期一是 1,星期日是 7。例如,星期三。另请参阅 ,。
date(2002, 12, 4).isoweekday() == 3
weekday()
isocalendar()
date.
isocalendar()
- 返回一个 3 元组(ISO 年、ISO 周数、ISO 工作日)。
ISO日历是公历的一种广泛使用的变体。请参阅 https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm以获得很好的解释。
ISO 年由 52 或 53 个整周组成,其中一周从星期一开始,到星期日结束。ISO 年的第一周是包含星期四的一年中的第一个(公历)日历周。这称为第 1 周,该星期四的 ISO 年与其公历年相同。
例如,2004 年从星期四开始,因此 ISO 2004 年的第一周从 2003 年 12 月 29 日星期一开始,到 2004 年 1 月 4 日星期日结束,所以 和。
date(2003, 12, 29).isocalendar() == (2004, 1, 1)
date(2004, 1, 4).isocalendar() == (2004, 1, 7)
date.
isoformat()
- 返回一个以 ISO 8601 格式表示日期的字符串,’YYYY-MM-DD’。例如,。
date(2002, 12, 4).isoformat() == '2002-12-04'
date.
__str__()
- 对于日期d,
str(d)
等价于d.isoformat()
。
date.
ctime()
- 返回一个表示日期的字符串,例如. 相当于 在本机 C 函数(调用但 不调用)符合 C 标准的平台上。
date(2002, 12, 4).ctime() == 'Wed Dec 4 00:00:00 2002'
d.ctime()
time.ctime(time.mktime(d.timetuple()))
ctime()
time.ctime()
date.ctime()
date.
formatstrftime(
)
- 返回一个表示日期的字符串,由显式格式字符串控制。引用小时、分钟或秒的格式代码将看到 0 值。有关格式化指令的完整列表,请参阅 strftime() 和 strptime() 行为。
date.
format__format__(
)
- 与 相同
date.strftime()
。这使得可以date
在格式化字符串文字中以及在使用str.format()
. 有关格式化指令的完整列表,请参阅 strftime() 和 strptime() 行为。
计算事件天数的示例:
>>> import time >>> from datetime import date >>> today = date.today() >>> today datetime.date(2007, 12, 5) >>> today == date.fromtimestamp(time.time()) True >>> my_birthday = date(today.year, 6, 24) >>> if my_birthday < today: ... my_birthday = my_birthday.replace(year=today.year + 1) >>> my_birthday datetime.date(2008, 6, 24) >>> time_to_birthday = abs(my_birthday - today) >>> time_to_birthday.days 202
使用示例date
:
>>> from datetime import date >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001 >>> d datetime.date(2002, 3, 11) >>> t = d.timetuple() >>> 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 = d.isocalendar() >>> for i in ic: ... print(i) 2002 # ISO year 11 # ISO week number 1 # ISO day number ( 1 = Monday ) >>> d.isoformat() '2002-03-11' >>> d.strftime("%d/%m/%y") '11/03/02' >>> d.strftime("%A %d. %B %Y") 'Monday 11. March 2002' >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month") 'The day is 11, the month is March.'