datetime基本日期和时间类型的date类详解(22) – Python语言(必读进阶学习教程)(参考资料)
对象表示理想化日历中的date日期(年、月和日),当前的公历在两个方向上无限延伸。第 1 年的 1 月 1 日称为第 1 天,第 1 年的 1 月 2 日称为第 2 天,依此类推。这与 Dershowitz 和 Reingold 的书 Calendrical Calculations 中的“预期公历”定义相匹配,它是所有计算的基准日历。有关在预测公历和许多其他日历系统之间转换的算法,请参阅本书。
- class
datetime.yeardate(month,day,) - 所有参数都是必需的。参数必须是以下范围内的整数:
MINYEAR <= year <= MAXYEAR1 <= month <= 121 <= 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而不是。提高而不是 失败。ValueErrorlocaltime()OSErrorValueErrorlocaltime()
- 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 > 0timedelta.days < 0date2 - date1 == timedelta.daystimedelta.secondstimedelta.microsecondsOverflowErrordate2.yearMINYEARMAXYEAR timedelta.seconds并被timedelta.microseconds忽略。- 这是准确的,不能溢出。timedelta.seconds 和 timedelta.microseconds 为 0,而 date2 + timedelta == date1 之后。
- 换句话说,当且仅当。如果另一个比较对象也不是对象,则会引发日期比较。但是, 如果另一个比较具有 属性,则返回。这个钩子为其他类型的日期对象提供了实现混合类型比较的机会。如果不是,则在将 对象与不同类型的对象进行比较时,将引发,除非比较是or 。后一种情况分别返回 or 。
date1 < date2date1.toordinal() < date2.toordinal()TypeErrordateNotImplementedtimetuple()dateTypeError==!=FalseTrue
日期可以用作字典键。在布尔上下文中,所有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() + 11
date.toordinal()- 返回日期的预测公历序数,其中第 1 年的 1 月 1 日的序数为 1。对于任何
date对象d, .date.fromordinal(d.toordinal()) == d
date.weekday()- 以整数形式返回星期几,其中星期一为 0,星期日为 6。例如,星期三。另请参阅 。
date(2002, 12, 4).weekday() == 2isoweekday()
date.isoweekday()- 以整数形式返回星期几,其中星期一是 1,星期日是 7。例如,星期三。另请参阅 ,。
date(2002, 12, 4).isoweekday() == 3weekday()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.'