datetime基本日期和时间类型的date对象详解(22)Python语言(必读进阶学习教程)(参考资料)
一个date
对象代表一个理想化的日历日期(年,月,日),当前的公历无限期延长两个方向。1年1月1日称为第1天,1年1月2日称为第2天,依此类推。这与Dershowitz和Reingold的书“Calendrical Calculations”中的“proleptic Gregorian”日历的定义相符,它是所有计算的基本日历。请参阅本书,了解在预知格列高利序列和许多其他日历系统之间进行转换的算法。
- 班级
datetime.
date
(年,月,日) - 所有参数都是必需的。参数可以是整数,在以下范围内:
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.
fromtimestamp
(timestamp ) - 返回与POSIX时间戳对应的本地日期,例如返回的日期
time.time()
。这可能会提高OverflowError
,如果时间戳是出在平台的C支持的值范围的localtime()
功能,并OSError
在localtime()
故障。这种情况通常限制在1970年到2038年之间。请注意,在非POSIX系统中,在时间戳概念中包含闰秒,闰秒会被忽略fromtimestamp()
。在版本3.3中更改:如果时间戳超出平台C 函数支持的值范围,则 升高
OverflowError
而不是。提高,而不是对失败。ValueError
localtime()
OSError
ValueError
localtime()
- classmethod
date.
fromordinal
(序数) - 返回对应于公历格里高利序数的日期,其中第1年1月1日有序数1.
ValueError
除非。对于任何日期d , .1 <=ordinal <= date.max.toordinal()
date.fromordinal(d.toordinal()) == d
- classmethod
date.
fromisoformat
(date_string ) date
以发出的格式返回对应于date_string的对应项date.isoformat()
。具体来说,此函数支持格式的字符串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之后。
- 换句话说,当且仅当。如果另一个比较不是对象,则日期比较会提高。但是,如果另一个comparand具有属性, 则返回 。这个钩子为其他类型的日期对象提供了实现混合类型比较的机会。如果不是,当将 对象与不同类型的对象进行比较时,除非比较为或,否则引发该对象。后一种情况分别返回 或。
date1 <date2
date1.toordinal() <date2.toordinal()
TypeError
date
NotImplemented
timetuple()
date
TypeError
==
!=
False
True
日期可以用作字典键。在布尔上下文中,所有date
对象都被认为是真的。
实例方法:
date.
replace
(year = self.year,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:002002'
d.ctime()
time.ctime(time.mktime(d.timetuple()))
ctime()
time.ctime()
date.ctime()
date.
strftime
(格式)- 返回表示日期的字符串,由显式格式字符串控制。引用小时,分钟或秒的格式代码将显示0值。有关格式化指令的完整列表,请参阅 strftime()和strptime()行为。
date.
__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.'