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

2023-12-30 14:38:38

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)

输出

<class 'str'>

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天

文章来源:https://blog.csdn.net/m0_73608980/article/details/135226151
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。