Python-datetime模块详解(未完,待续)

本文深入探讨了Python的datetime模块,包括date、time、datetime和timedelta类的使用。介绍了如何获取当前日期、比较日期、计算日期差、日期格式化输出以及时间对象的构造、比较和字符串转换。此外,还展示了datetime类的特性,如获取UTC时间、时间戳转换和日期时间的组合。最后,通过实例展示了日期和时间的计算操作,如获取上个月第一天和最后一天,计算时间差等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、datetime模块介绍

1.datetime包含的类

在这里插入图片描述
在这里插入图片描述

2.datetime包含的常量

在这里插入图片描述

二、date类

1.对象构成

构造方法
获取当天的年月日

>>> from datetime import date
>>> today = date.today()
>>> today.year
2022
>>> today.month
3
>>> today.day
10

2、date对象中包含的方法与属性

1、用于日期比较大小的方法

在这里插入图片描述


>>> yesterday = date(today.year,today.month,today.day-1)
>>> yesterday
datetime.date(2022, 3, 9)
>>> yesterday.day
9
>>> yesterday.month
3
>>> yesterday.year
2022


>>> yesterday == today
False
>>> yesterday < today
True
>>> yesterday > today
False

2、获得二个日期相差多少天

计算结果的返回值类型为datetime.timedelta,只能返回多少天

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

>>> (yesterday - today).days
-1

3、ISO标准化日期

isocalendar().week 返回的是距离去年年底过了多少周
isocalendar().weekday 返回的是周几 (1-7)

>>> today.isocalendar()
datetime.IsoCalendarDate(year=2022, week=10, weekday=4)

属性可以通过索引访问,也可以通过句点符访问year、week、weekday

>>> today
datetime.date(2022, 3, 10)
>>> today.isocalendar()
datetime.IsoCalendarDate(year=2022, week=10, weekday=4)
>>> today.isocalendar().year
2022
>>> today.isocalendar().week
10
>>> today.isocalendar().weekday
4
>>> today.isocalendar()[0]
2022
>>> today.isocalendar()[1]
10
>>> today.isocalendar()[2]
4
isoformat(…)
返回符合ISO 8601标准 (
YYYY-MM-DD
) 的日期字符串;
>>> today.isoformat()
'2022-03-10'

isoweekday(…): 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)

>>> today.isoweekday()
4

与isoweekday(…)相似的还有一个weekday(…)方法,只不过是weekday(…)方法返回的周一为 0, 周日为 6

>>> today.weekday()
3

4、其他方法与属性

1). timetuple(…):该方法为了兼容time.localtime(…)返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0:
tm_yday:表示的是从新的一年的元旦(零点)一共走过的天数

>>> from datetime import date
>>> a = date.today()
>>> a
datetime.date(2022, 3, 10)
>>> a.timetuple()
time.struct_time(tm_year=2022, tm_mon=3, tm_mday=10, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=69, tm_isdst=-1)
>>> 31 + 28 + 10
69
>>> a.timetuple().tm_year
2022
>>> 

2).toordinal(…): 返回公元公历开始到现在的天数。公元1年1月1日为1

>>> a.toordinal()
738224

3). replace(…):返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产生新对象,不影响原date对象。

>>> a.replace(year=2010)
datetime.date(2010, 3, 10)
>>> a
datetime.date(2022, 3, 10)

4).resolution:date对象表示日期的最小单位。这里是天。

>>> a.resolution
datetime.timedelta(days=1)
>>> a.resolution.days
1

5).fromordinal(…):将Gregorian日历时间转换为date对象;Gregorian Calendar :一种日历表示方法,类似于我国的农历,西方国家使用比较多。(就是把时间天数转换为date对象

>>> date.fromordinal(a.toordinal())
datetime.date(2022, 3, 10)

6).fromtimestamp(…):根据给定的时间戮,返回一个date对象

>>> import time
>>> time.time()
1646920802.0949812
>>> date.fromtimestamp(time.time())
datetime.date(2022, 3, 10)

7).today(…):返回当前日期

>>> date.today()
datetime.date(2022, 3, 10)

8).max: date类能表示的最大的年、月、日的数值;min: date类能表示的最小的年、月、日的数值

>>> date.max
datetime.date(9999, 12, 31)
>>> date.min
datetime.date(1, 1, 1)

3、日期的字符串输出

1、如果你想将日期对象转化为字符串对象的话,可以用到__format__(…)方法以指定格式进行日期输出:

>>> a.__format__('%Y-%m-%d')
'2022-03-10'
>>> a.__format__('%Y/%m/%d')
'2022/03/10'
>>> a.__format__('%D')
'03/10/22'

等价于strftime

>>> a.strftime('%Y-%m-%d')
'2022-03-10'

在这里插入图片描述
2、如果只是相简单的获得日期的字符串,使用str(…)

>>> str(a)
'2022-03-10'

3、如果想要获得ctime样式的格式请使用ctime(…):

>>> a.ctime()
'Thu Mar 10 00:00:00 2022'

三、time类

(一)、time对象构成

在这里插入图片描述

>>> from datetime import time
>>> a = time(1,2,3,4)
>>> a.hour
1
>>> a.minute
2
>>> a.second
3
>>> a.microsecond
4
>>> a.tzinfo

(二)、time类中的方法和属性

1、比较时间大小

>>> a
datetime.time(1, 2, 3, 4)
>>> b = time(2,4,5,7)
>>> a > b
False
>>> a == b
False
>>> a <= b
True

2、判断时间对象是否非零,返回值为True/False:

>>> a == 0
False
>>> a != 0
True

3、其他属性
1)、max:最大的时间表示数值;min:最小的时间表示数值

>>> a.max
datetime.time(23, 59, 59, 999999)
>>> a.min
datetime.time(0, 0)

2)、resolution:时间间隔单位为分钟

>>> time.resolution
datetime.timedelta(microseconds=1)
>>> a.resolution
datetime.timedelta(microseconds=1)
>>> time.resolution.microseconds
1

(三)、时间的字符串输出

1、如果你想将时间对象转化为字符串对象的话,可以用到__format__(…)方法以指定格式进行时间输出

>>> a
datetime.time(1, 2, 3, 4)
>>> a.strftime('%H:%M:%S')
'01:02:03'
>>> a.__format__('%H:%M:%S')
'01:02:03'

2、ISO标准输出
如果要使输出的时间字符符合ISO标准,请使用isoformat(…):

>>> a.isoformat()
'01:02:03.000004'

3、如果只是相简单的获得时间的字符串,则使用str(…):

>>> str(a)
'01:02:03.000004'

四、datetime类

(一)、datetime对象构成

>>> a = datetime.today()
>>> a
datetime.datetime(2022, 3, 10, 22, 51, 59, 983579)

(二)、专属于datetime的方法和属性

1、 date(…):返回datetime对象的日期部分;time(…):返回datetime对象的时间部分:

>>> a = datetime.today()
>>> a.date()
datetime.date(2022, 3, 10)
>>> a.time()
datetime.time(22, 55, 22, 156704)

2、utctimetuple(…):返回UTC时间元组:

>>> a.utctimetuple()
time.struct_time(tm_year=2022, tm_mon=3, tm_mday=10, tm_hour=22, tm_min=55, tm_sec=22, tm_wday=3, tm_yday=69, tm_isdst=0)

3、combine(…):将一个date对象和一个time对象合并生成一个datetime对象:

>>> a
datetime.datetime(2022, 3, 10, 22, 55, 22, 156704)
>>> datetime.combine(a.date(),a.time())
datetime.datetime(2022, 3, 10, 22, 55, 22, 156704)

4、now(…):返回当前日期时间的datetime对象:

>>> datetime.now()
datetime.datetime(2022, 3, 10, 23, 0, 16, 227303)

5、utcnow(…):返回当前日期时间的UTC datetime对象:

>>> from datetime import datetime
>>> datetime.utcnow()
datetime.datetime(2022, 3, 11, 0, 19, 10, 558382)

6、strptime(…):根据string, format 2个参数,返回一个对应的datetime对象:注意这里的字符串必须用**‘-’分隔开,比如说’2017-3-22 15:25’**

>>> datetime.strptime('2017-3-22 15:25', '%Y-%m-%d %H:%M')
datetime.datetime(2017, 3, 22, 15, 25)
>>> datetime.strptime('2017-3-22','%Y-%m-%d')
datetime.datetime(2017, 3, 22, 0, 0)

7、utcfromtimestamp(…):UTC时间戳的datetime对象,时间戳值为time.time():

>>> import time
>>> datetime.utcfromtimestamp(time.time())
datetime.datetime(2022, 3, 11, 0, 25, 58, 512137)

五、timedelta类

timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)

六、日期计算实操

1.获取当前日期时间:

>>> from datetime import timedelta
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2022, 3, 12, 11, 18, 4, 273085)
>>> from datetime import date
>>> today = date.today() 
>>> today
datetime.date(2022, 3, 12)
>>> now.date()
datetime.date(2022, 3, 12)
>>> now.time()
datetime.time(11, 18, 4, 273085)

2.获取上个月第一天和最后一天的日期:

>>> today
datetime.date(2022, 3, 12)
>>> last_day = date(today.year,today.month,1) - timedelta(1)
>>> last_day
datetime.date(2022, 2, 28)
>>> last_day = date(today.year,today.month,1) - timedelta(days=1)
>>> last_day
datetime.date(2022, 2, 28)
>>> first_day = date(today.year,today.month-1,1)
>>> first_day
datetime.date(2022, 2, 1)

3.获取时间差
时间差单位为秒,

>>> start_time = datetime.now()
>>> end_time = datetime.now()
>>> end_time - start_time
datetime.timedelta(seconds=8, microseconds=655820)
>>> (end_time - start_time).seconds
8

差值不只是可以查看相差多少秒,还可以查看天(days), 秒(seconds), 微秒(microseconds).

4.计算当前时间向后8个小时的时间

>>> d1 = datetime.now() + timedelta(hours=8)
>>> d1
datetime.datetime(2022, 3, 12, 19, 30, 4, 329954)

可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds).

5.计算上周一和周日的日期

>>> today
datetime.date(2022, 3, 12)
>>> today.isoweekday()
6
>>> today.weekday()
5
>>> last_sunday = today - timedelta(days=today.isoweekday())
>>> last_sunday
datetime.date(2022, 3, 6)


>>> last_monday = today - timedelta(days=today.isoweekday()+6)
>>> last_monday
datetime.date(2022, 2, 28)

6.计算指定日期当月最后一天的日期和本月天数
7.计算指定日期下个月当天的日期
8.获得本周一至今天的时间段并获得上周对应同一时间段

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aJupyter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值