Python标准库datetime库date类详解(2/6)

date对象

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

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

常用方法

1、datetime.date(year, month, day)

date构造器方法,所有参数都是必要的。 参数必须是在下面范围内的整数:

MINYEAR <= year <= MAXYEAR

1 <= month <= 12

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

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

例:

import datetime

today = datetime.date(2023,12,24) # 构造一个日期对象

yesterday = today- datetime.timedelta(days=1)

print(yesterday) # 输出:2023-12-23

2、date.today()

返回当前的本地日期。

这等价于 date.fromtimestamp(time.time())。

例:

import datetime

print(datetime.date.today()) # 输出:2023-12-24

3、date.fromtimestamp(timestamp)

这个方法将一个时间戳转换为一个 date 对象。例如 time.time() 返回的就是时间戳。

import datetime

import time

date = datetime.date.fromtimestamp(time.time())

print(time.time()) # 1703469443.870029

print(date) # 输出:2023-12-25

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

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

4、date.fromordinal(ordinal)

这个方法将一个给定的序数(ordinal)转换为一个 date 对象。其中公元 1 年 1 月 1 日的序号为 1。

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

3.7 新版功能.

在 3.11 版更改: 在之前版本中,此方法仅支持一种格式 YYYY-MM-DD。

例:

import datetime

date = datetime.date.fromordinal(1)

print(date) # 输出:0001-01-01,公元1年1月1日

print(datetime.date.fromordinal(738879)) # 输出:2023-12-25

5、date.toordinal()

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

例:

import datetime

date = datetime.date.toordinal(datetime.date.today())

print(date) # 输出:738879

6、date.replace(year=self.year, month=self.month, day=self.day)

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

示例:

import datetime

date = datetime.date.today() # today=2023-12-25

print(date.replace(year=1992)) # 输出:1992-12-25

7、date.isoweekday()

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

import datetime

date = datetime.date.today()

print("今天是星期%s" %(date.isoweekday())) # 输出:今天是星期1

8、date.strftime(format):用于将日期对象格式化为指定的字符串形式。

format 参数是一个格式化字符串,它定义了如何格式化日期。一些常见的格式化选项包括:

%Y:四位数的年份

%m:两位数的月份

%d:两位数的日期

%H:24小时制的小时数

%M:分钟数

%S:秒数

例:

from datetime import date  

  

d = date.today()  

formatted_date = d.strftime("%Y")  

print(formatted_date) # 输出:2023

不常用方法

1、date.fromisoformat(date_string)

功能:这个方法将一个符合 ISO 8601 格式的字符串转换为 date 对象。

3.8 新版功能.

例:

from datetime import date  

  

# 使用ISO格式字符串创建一个date对象  

d = date.fromisoformat('2023-07-05')  

print(d)  # 输出:2023-07-05

2、date.timetuple()

功能:将日期对象转换为一个 time.struct_time,即 time.localtime() 所返回的类型。

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

d.timetuple() 等价于:

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 月 1 日的序号为 1。

例:

import datetime

date = datetime.date.timetuple(datetime.date.today())

print(date)

输出:time.struct_time(tm_year=2023, tm_mon=12, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=359, tm_isdst=-1)

3、date.weekday()

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

例:

import datetime

date = datetime.date.today()

print("今天是星期%s" %(date.weekday()+1)) # 输出:今天是星期1

4、date.isocalendar()

功能:它返回一个三元组,包含年份、星期几和一周中的哪一天(从1(星期一)到7(星期日))。

ISO 历法是一种被广泛使用的公历。 

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

在 3.9 版更改: 结果由元组改为 named tuple。

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

例:

from datetime import date  

  

d = date.today()  

year, week, weekday = d.isocalendar()  

print(f"{year}年{week}周,星期{weekday}") # 输出:2023年52周,星期1

5、date.isoformat()

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

例:

from datetime import date  

  

d = date.today()  

iso_format = d.isoformat()  

print(iso_format) # 输出:2023-12-25

6、date.__str__()

功能:对于日期对象 d, str(d) 等价于 d.isoformat() 。

date.__str__() 是Python的 datetime.date 对象的一个特殊方法,用于返回对象的字符串表示形式。这个方法返回的字符串通常以 "YYYY-MM-DD" 的形式表示日期。

例:

from datetime import date  

  

d = date.today()  

str_format = d.__str__()  

print(type(str_format))

print(str_format)

输出

2023-12-25

7、date.ctime()

功能:它将日期对象转换为一个字符串,该字符串以“Sun Jan 1 00:00:00 1970”的形式表示日期。

d.ctime() 等效于:

time.ctime(time.mktime(d.timetuple()))

例:

from datetime import date  

  

print(date(2022,12,22).ctime()) # 输出:Thu Dec 22 00:00:00 2022

8、date.__format__(format) 

功能:用于将日期对象格式化为指定的字符串形式。

这个方法与 strftime 方法类似,但是它接受一个可选的 format 参数,用于指定日期的输出格式。

format 参数是一个字符串,它定义了日期的输出格式。

例:

from datetime import date  

  

d = date.today()  

formatted_date = d.__format__("%Y")  

print(formatted_date) # 输出:2023

类属性:

1、date.min

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

2、date.max

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

3、date.resolution

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

例:

from datetime import date  

  

print("最小日期:%s,最大日期:%s,两日期最小间隔:%s" %(date.min,date.max,date.resolution))

输出:最小日期:0001-01-01,最大日期:9999-12-31,两日期最小间隔:1 day, 0:00:00

date实例属性(只读)

1、date.year

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

2、date.month

1 至 12(含)

3、date.day

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

例:

import datetime

date = datetime.date.today()

print(date.year,date.month,date.day) # 输出:2023 12 25

支持的运算

运算

结果:

date2 = date1 + timedelta

date2 将为 date1 之后的 timedelta.days 日。 (1)

date2 = date1 - timedelta

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

timedelta = date1 - date2

(3)

date1 < date2

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

注释

1、如果 timedelta.days > 0 则 date2 将在时间线上前进,如果 timedelta.days < 0 则将后退。

操作完成后 date2 - date1 == timedelta.days。 

timedelta.seconds 和 timedelta.microseconds 会被忽略。

如果 date2.year 将小于 MINYEAR 或大于 MAXYEAR 则会引发 OverflowError。

2、timedelta.seconds 和 timedelta.microseconds 会被忽略。

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

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

date用法示例

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

from datetime import date

import time

元旦 = date(2024,1,1)

今天 = date.today()

天数 = abs(元旦 - 今天)

print(f"距离2024年元旦还有{天数.days}天") # 输出:距离2024年元旦还有7天

你可能感兴趣的:(python,开发语言)