Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。
总结: datetime类的功能函数众多,大家不妨选择感兴趣的功能函数复制代码执行,看上去会更直观(以下代码均实际执行有效)。
----------动动小手,非常感谢各位的点赞收藏和关注。-----------
使用datetime模块
要使用 datetime模块,直接导入它即可。
import datetime 或者 from datetime import time,datetime,date,timedelta
datetime类
主要用于处理时间,包括年,月,日,小时,分钟,秒,时区等,类似于之前介绍的time模块,其中很多函数也都用到了tiime模块的功能
1. now(tz=None)和utcnow()
是datetiime类的类方法,不需要初始化,可直接调用。
按照一定格式返回当前时间戳或者utc时间戳(UTC时间指0时区时间,我们中国位于东8区,时间比UTC时间早8个小时),格式如2024-09-02 22:10:39.012769。
其中now函数的参数tz表示时区,传入参数datetime.timezone.utc时区,效果跟utcnow函数一样。
测试代码:
from datetime import datetime
print(f"UTC时间: {datetime.utcnow()}")
print(f"UTC时间: {datetime.now(timezone.utc)}")
print(f"当前时间: {datetime.now()}")
执行后结果:
UTC时间: 2024-09-02 14:28:03.348786
UTC时间: 2024-09-02 14:28:03.348918+00:00
当前时间: 2024-09-02 22:28:03.348931
now和utcnow函数返回的是datetime对象,对象包括了如下年,月,日,小时,分钟,秒数等初始化参数,并且这些参数可以作为属性访问。
比如:获取以下时间内容
import datetime
nowtime = datetime.datetime.now()
print(f"当前 年: {nowtime.year}")
print(f"当前 月: {nowtime.month}")
print(f"当前 日: {nowtime.day}")
print(f"当前 小时: {nowtime.hour}")
print(f"当前 分钟: {nowtime.minute}")
print(f"当前 秒: {nowtime.second}")
print(f"当前 微秒: {nowtime.microsecond}")
执行后结果:
当前 年: 2024
当前 月: 9
当前 日: 2
当前 小时: 22
当前 分钟: 49
当前 秒: 20
当前 微秒: 498617
其他函数若是返回的也是datetiime对象,也可访问这些属性。
2 strftime(format)
该函数不是类函数,需要先初始化类,然后在调用。该函数将日期格式化为字符串,format参数类似time模块中的介绍。
- %Y:年份,比如2024
- %m:月份,比如01,02,直到12
- %d:天数,比如一个月中的第1天,第2天,直到第31天
- %H:小时,为24小时制,比如从00,01直到23
- %M:分钟,比如从00,01直到59
- %S:秒数,比如从00,01直到59
- %z: UTC时区偏移
- %a :缩写的星期几,比如Sat代表星期六
- %L:完整的星期几,比如Staturday代表星期六
- %b:缩写的月份,比如Aug代表8月份
- %B :完整的月份,比如August代表8月份
- %c:按照一定格式展示,比如Sat Aug 31 14:01:17 2024
- %I:小时,为12进制。比如01,02,直到12
- %p: AM或PM
- 测试代码:
#将当前时间格式化为如下格式 '%Y%m%d %H%M%S %p',格式大家可以根据需要自己指定。
from datetime import datetime
print(datetime.now().strftime('%Y%m%d %H%M%S %p'))
结果:20240902 225414 PM
3 strptime(date_string,format)
strptime()函数是类函数,可直接调用。将时间字符串按照格式转为datetime对象,跟函数strftime功能正好相反。
format格式和date_string的格式要一致,否则报错。
比如时间字符串’20240831173340’对应的格式’%Y%m%d%H%M%S’,时间字符串’2024-08-31-17-33-40’对应的格式’%Y-%m-%d-%H-%M-%S’。
测试代码:
import datetime
datestrip_ins = datetime.datetime.strptime('20240902 225414 PM','%Y%m%d %H%M%S %p')
print(datestrip_ins)
print(type(datestrip_ins))
print(datestrip_ins.year)
结果:
2024-09-02 22:54:14
<class 'datetime.datetime'>
2024
4 fromtimestamp(t,tz=None)
是datetime类的类方法,不需要初始化,可直接调用。
参数t表示传入的时间戳(自1970年1月1日以来的秒数),返回的是时间戳对应的时间。上面的now函数调用了该函数。
测试代码:
#打印时间戳对应的时间和UTC时间。
from datetime import datetime, timezone
print(datetime.fromtimestamp(360000))
print(datetime.fromtimestamp(360000,tz=timezone.utc))
执行后结果:
1970-01-05 12:00:00
1970-01-05 04:00:00+00:00
5 utcfromtimestamp(t)
是datetime类的类方法,不需要初始化,可直接调用。
参数t表示传入的时间戳(自1970年1月1日以来的秒数),返回的是时间戳对应的UTC时间。上面的utcnow函数调用了该函数,跟fromtimestamp函数传入UTC时区参数时是一样的用法。
测试代码:
#打印时间戳对应的UTC时间。
from datetime import datetime
print(datetime.utcfromtimestamp(360000))
执行后结果:
1970-01-05 04:00:00
6 combine(date,time,tzinfo=True)
是datetime类的类方法,不需要初始化,可直接调用。
参数date指datetime.date类实例化的对象,time指datetime.time类实例化的对象,该函数将对应的年/月/日和时/分/秒/微秒合并为一个datetime.datetime对象。
测试代码:
#从datetime导入date和time类,合并两个实例对象为datetime对象
from datetime import datetime,time,date
print(datetime.combine(date(2024,9,5),time(21,20,57,200)))
执行后结果:
2024-09-05 21:20:57.000200
7 fromisoforamt(date_string)
是datetime类的类方法,不需要初始化,可直接调用。
参数date_string为固定格式的时间字符串,该函数将字符串转为时间对象。
时间是固定格式,比如‘2024-09-05 21:30:25:64000’
- 日期格式:必须是上面的格式,否则报错,‘2024-09-05’共10位字符.
- 时间格式:有效的时间格式如下:
# HH:MM len: 5# HH:MM:SS len: 8# HH:MM:SS.ffffff len: 15
测试代码:
from datetime import datetime
print(datetime.fromisoformat('2024-09-05 21:54:34:640'))
执行后结果:
2024-09-05 21:54:34.640000
8 utcfromtimestamp(t)
是datetime类的类方法,不需要初始化,可直接调用。
参数t表示传入的时间戳(自1970年1月1日以来的秒数),返回的是时间戳对应的UTC时间。上面的utcnow函数调用了该函数,跟fromtimestamp函数传入UTC时区参数时是一样的用法。
测试代码:
#打印时间戳对应的UTC时间。
from datetime import datetime
print(datetime.utcfromtimestamp(360000))
执行后结果:
1970-01-05 04:00:00
9 timetuple()
该函数返回datetime日期对象的元组格式,跟之前time模块中说明的元组格式是一样的。
使用该函数,需要先实例化datetime类,然后调用该函数。
测试代码:
#datetime类使用日期时间先初始化
import datetime
date_ins = datetime.datetime(2024,9,5,21,34,25,500)
print(date_ins.timetuple())
结果:
time.struct_time(tm_year=2024, tm_mon=9, tm_mday=5,
tm_hour=21, tm_min=34,
tm_sec=25, tm_wday=3, tm_yday=249,
tm_isdst=-1)
元组可以使用切片访问元素:
print(date_ins.timetuple()[0])
print(date_ins.timetuple()[1])
print(date_ins.timetuple()[2])
#结果
2024
9
5
10 ctime()
该函数返回的日期为字符串,格式为固定的格式,比如“Sun Sep 1 00:00:00 2024”
测试代码:
#datetime类使用日期时间先初始化
from datetime import datetime
date_ins = datetime(2024,9,5,21,34,25,500)
print(date_ins.ctime())
结果:Thu Sep 5 21:34:25 2024
11 timestamp()
该函数返回自从1970年1月1日以来的秒数时间戳。
测试代码:
#date类使用年月日先初始化
from datetime import datetime
date_ins = datetime(2024,9,5,21,34,25,500)
print(date_ins.timestamp())
结果:1725543265.0005
12 date()
该函数返回datetime.date对象,对于date类的使用,参见其他文章介绍:datetime.date介绍
13 time()
该函数返回datetime.time对象,对于time类的使用,参见其他文章介绍:datetime.time介绍
14 isoformat(sep=’T’,timespec=’auto’)
该函数返回的日期对象格式化后的字符串,格式为格式,比如2024-09-05E21:34:25.000500 或者2024-09-05T21:34:25.000
- 参数sep:日期和时间中间的字符,默认为大写字母T,也可以改为其他字符,但是只能传入一个字符,否则报错。
- 参数timespec:指返回的时间是秒 微秒还是毫秒。 如果传入milliseconds代表返回毫秒;如果默认auto,初始化datetime对象添加了微秒参数,则返回微秒,否则返回秒。
测试代码:
#datetime初始化对象传入微秒,修改sep和timespec的值检查结果
from datetime import datetime
date_ins = datetime(2024,9,5,21,34,25,500)
print(date_ins.isoformat())
print(date_ins.isoformat(sep='E'))
print(date_ins.isoformat(timespec='milliseconds'))
结果:
2024-09-05T21:34:25.000500
2024-09-05E21:34:25.000500
2024-09-05T21:34:25.000
#datetime初始化对象不传微秒,timespec保持默认值
date_ins = datetime(2024,9,5,21,34,25)
print(date_ins.isoformat())结果:
2024-09-05T21:34:25
15 日期的加减运算
在初始化日期的基础上计算n天前某个时间或者n天后某个时间对应的时间。
需要配合使用datetime.timedelta类。
举例:
- 计算某个日期在50天2小时后对应的时间
from datetime import datetime,timedelta
date_ins = datetime(2024,9,5,21,34,25)
print(date_ins + timedelta(days=50,hours=2))
结果:2024-10-25 23:34:25
- 计算某个日期在50天前对应的时间再加上2小时20分
from datetime import datetime,timedelta
date_ins = datetime(2024,9,5,21,34,25)
print(date_ins + timedelta(days=-50,hours=2,minutes=20))
结果:2024-07-17 23:54:25
- 计算两个日期相差的时间
from datetime import datetime,timedelta
date_ins = datetime(2024,9,5,21,34,25)
date_ins2 = datetime(2024,9,12,2,34,25)
print(date_ins2 - date_ins)
结果:6 days, 5:00:00
datetiime类的时间计算,相比date类只能计算年月日来说,还能计算时分秒,功能更加强大。
16 日期的大小比较
正因为datetime类有__eq__,__lt__等魔法方法,所以具备大小比较的功能。
测试代码:
#两个初始化对象,比较两者时预期结果为date_ins2较大(因为时间更靠后)
date_ins = datetime(2024,9,5,21,34,25)
date_ins2 = datetime(2024,9,12,2,34,25)
print(date_ins2 > date_ins)
#结果
True
#两个初始化对象参数一致,比较两者时预期结果为True
date_ins = datetime(2024,9,5,21,34,25)
date_ins2 = datetime(2024,9,5,21,34,25)
print(date_ins2 == date_ins)
结果:
True
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。