您的位置:  首页 » Python » 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.fromtimestamptimestamp 
返回与POSIX时间戳对应的本地日期,例如返回的日期time.time()。这可能会提高OverflowError,如果时间戳是出在平台的C支持的值范围的localtime()功能,并OSErrorlocaltime()故障。这种情况通常限制在1970年到2038年之间。请注意,在非POSIX系统中,在时间戳概念中包含闰秒,闰秒会被忽略fromtimestamp()

在版本3.3中更改:如果时间戳超出平台C 函数支持的值范围,则 升高OverflowError而不是。提高,而不是对失败。ValueErrorlocaltime()OSErrorValueErrorlocaltime()

classmethod date.fromordinal序数
返回对应于公历格里高利序数的日期,其中第1年1月1日有序数1. ValueError除非。对于任何日期d , .1 <=ordinal <= date.max.toordinal()date.fromordinal(d.toordinal()) == d
classmethod date.fromisoformatdate_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
MINYEARMAXYEAR包容性。
date.month
介于1到12之间。
date.day
在给定年份的给定月份中的1和之间的天数。

支持的操作:

手术 结果
date2 = date1 + timedelta date2timedelta.daysdate1中删除的天数。(1)
date2 = date1 - timedelta 计算date2就是这样。(2)date2 + timedelta == date1
timedelta = date1 - date2 (3)
date1 < date2 date1date2之前时, date1被认为小于date2。(4)

笔记:

  1. 如果,则向后移动date2,如果向后 移动,则向前移动。之后。 并被忽略。 如果小于 或大于,则被提出。timedelta.days > 0timedelta.days < 0date2 - date1 ==timedelta.daystimedelta.secondstimedelta.microsecondsOverflowErrordate2.yearMINYEARMAXYEAR
  2. timedelta.seconds并被timedelta.microseconds忽略。
  3. 这是确切的,不能溢出。timedelta.seconds和timedelta.microseconds是0,而date2 + timedelta == date1之后。
  4. 换句话说,当且仅当。如果另一个比较不是对象,则日期比较会提高。但是,如果另一个comparand具有属性, 则返回 。这个钩子为其他类型的日期对象提供了实现混合类型比较的机会。如果不是,当将 对象与不同类型的对象进行比较时,除非比较为或,否则引发该对象。后一种情况分别返回 或。date1 <date2date1.toordinal() <date2.toordinal()TypeErrordateNotImplementedtimetuple()dateTypeError==!=FalseTrue

日期可以用作字典键。在布尔上下文中,所有date 对象都被认为是真的。

实例方法:

date.replaceyear = self.yearmonth = self.monthday = 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__
对于日期dstr(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.'

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注