一、time时间模块
1、 时间格式
time模块中时间表现的格式主要有三种:
- timestamp 时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
- struct_time 时间元组,共有九个元素组。
- format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
时间格式转换如图:
2、常用函数
函数 | 说明 |
sleep | 设置休眠时间 |
time | 返回自纪元(时间基准1970年1月1日)以来的当前时间的时间戳,以秒为单位,可以通过时间戳来做日期的运算 |
localtime | 将时间戳转换成时间元组,获取当前本地时间,北京时间,返回类型为 struct_time 对象 |
gmtime | 将时间戳转换成时间元组,获取UTC时间(格林尼治时间),世界统一时间,返回类型为 struct_time 对象 |
mktime | 将时间元组转换成时间时间戳 |
ctime | 将时间戳转换成时间字符串,如果时间戳不存在,则使用 localtime() 返回的当前时间 |
asctime | 将时间元组转换成时间字符串,如果时间元组不存在,则使用 localtime() 返回的当前时间。 |
strftime | 格式化时间,将时间元组对象转换成时间字符串 |
strptime | 格式化时间,将时间字符串转换成时间元 |
3、时间元组
- struct_time 对象是一个包含九个元素的元组,可以通过索引和属性名访问值
二、datetime日期模块
datetime 基于 time 进行了封装,提供了更多实用的函数,推荐使用。
datetime 模块中包含了如下几个类:
类 | 说明 |
date | 日期 |
time | 时间 |
datetime | 日期和时间 |
tzinfo | 时区 |
timedelta | 时间差 |
注:@classmethod 修饰的方法为类方法,不需要实例化可以直接调用;不带任何装饰器的方法为实例方法。
1、 date(日期类型)
date 类表示一个由年、月、日组成的日期。
格式:datetime.date(year, month, day)。
- year 范围为:[1, 9999]
- month 范围为:[1, 12]
- day 范围为 [1, 给定年月对应的天数]
类方法:
方法/属性 | 说明 |
today() | 返回当前本地时间,格式YYYY-MM-DD |
fromtimestamp() | 参数是时间戳,返回本地时间,格式 YYYY-MM-DD |
实例方法:
方法 | 说明 |
ctime() | 返回一个ctime类型的日期字符串,格式 Fri May 7 00:00:00 2021 |
isoformat() | 返回一个iso格式的日期字符串,格式 YYYY-MM-DD |
strftime() | 返回一个自定义格式的日期字符串 |
实例:
import datetime
# date 日期类,包含年、月、日。精确度到天
print("***这是类方法***")
print(datetime.date)
print(datetime.date.today())
print(datetime.date.fromtimestamp(0)) # 参数是时间戳
print("***这是实例方法***")
t = datetime.date(2021,5,10)
print(t)
print(t.today())
print(t.ctime()) # 返回一个ctime格式的日期字符串
print(t.isoformat()) # 返回一个iso格式的日期字符串
print(t.strftime("%Y-%m-%d %a")) # 返回一个自定义格式的日期字符串
---------------------------------------------------------------------------------
运行结果:
***这是类方法***
<class 'datetime.date'>
2021-05-10
1970-01-01
***这是实例方法***
2021-05-10
2021-05-10
Mon May 10 00:00:00 2021
2021-05-10
2021-05-10 Mon
2、 time(时间类型)
time 类表示由时、分、秒、微秒组成的时间。
格式:time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
- hour 小时,范围为:[0, 24)
- minute 分钟,范围为:[0, 60)
- second 秒,范围为:[0, 60)
- microsecond 微秒,范围为:[0, 1000000)
- tzinfo 时区
- fold 范围为: [0, 1]
类方法:
方法/属性 | 说明 |
无 |
实例方法:
方法 | 说明 |
isoformat() | 返回一个iso格式的时间字符串 |
strftime() | 返回一个自定义格式的时间字符串 |
实例:
import time
# time 时间类,包含时、分、秒、微秒。精确到微秒,而且可以具有时区(tzinfo)属性。
print("***这是类方法***")
print(datetime.time)
print("***这是实例方法***")
t = datetime.time(17,47,50)
print(t.hour)
print(t.isoformat()) # 返回一个iso格式的时间字符串
print(t.strftime('%H:%M:%S %p')) # 返回一个自定义格式的时间字符串
---------------------------------------------------------------------------------
运行结果:
***这是类方法***
<class 'datetime.time'>
***这是实例方法***
17
17:47:50
17:47:50 PM
3、 datetime (时间日期类型)
datetime 包括了 date 与 time 的所有信息。
格式为:datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
类方法:
方法 | 说明 |
today() | 返回当前本地时间 |
now() | 返回当前本地时间 |
utcnow() | 返回当前UTC时间 |
fromtimestamp() | 参数为时间戳,返回本地时间 |
utcfromtimestamp() | 参数为时间戳,返回UTC时间 |
实例方法:
方法 | 说明 |
date() | 返回 date 对象 |
time() | 返回 time 对象 |
ctime() | 返回一个ctime格式的日期时间字符串 |
isoformat() | 返回一个iso格式的日期时间字符串 |
strformat() | 返回一个自定义格式的日期时间字符串 |
实例:
import datetime
# datetime 日期时间类,包含date和time的所有信息
print("***这是类方法***")
print(datetime.datetime)
print(datetime.datetime.today())
print(datetime.datetime.now()) # 返回当前本地时间
print(datetime.datetime.utcnow()) # 返回当前utc时间
print(datetime.datetime.fromtimestamp(0)) # 根据时间戳返回本地时间
print(datetime.datetime.utcfromtimestamp(0)) #根据时间戳返回UTC时间
print("***这是实例方法***")
t = datetime.datetime(year=2020,month=5,day=10,hour=18,minute=32,second=30) # 实例化对象,年月日必填
print(t)
print(t.date()) # 返回date对象
print(t.time()) # 返回time对象
print(t.ctime()) # 返回一个ctime格式的日期时间字符串
print(t.isoformat()) # 返回一个iso格式的日期时间字符串
print(t.strftime("%Y-%m-%d"))
----------------------------------------------------------------------------------
运行结果:
***这是类方法***
<class 'datetime.datetime'>
2021-05-10 18:43:52.816934
2021-05-10 18:43:52.816934
2021-05-10 10:43:52.816934
1970-01-01 08:00:00
1970-01-01 00:00:00
***这是实例方法***
2020-05-10 18:32:30
2020-05-10
18:32:30
Sun May 10 18:32:30 2020
2020-05-10T18:32:30
2020-05-10
4、tzinfo(时区类型)
几种时间:
- 本地时间(北京时间)
- UTC时间(格林尼治时间)
- DST时间(夏时令时间)
zinfo是一个抽象类,所以不能直接被实例化。子类必须重写name()、utcoffset()和dst()方法
推荐使用pytz模块,里面自带了适合各个国家和时区的tzinfo对象,我们可以直接使用。
5、 timedelta(时间差类型)
timedelta 对象表示两个datetime 对象的时间差值。
格式:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
其中参数都是可选,默认值为0
import datetime
# timedelta 时间差
era_time = datetime.datetime.fromtimestamp(0)
now_time = datetime.datetime.now()
print(era_time)
print(now_time)
#计算当前时间到纪元时间的时间差
delta_time = now_time - era_time
print(type(delta_time))
print(delta_time)
print(delta_time.days) # 差了多少天
#当前日期往后加一天
new_time = now_time + datetime.timedelta(days=1)
print(type(new_time))
print(new_time)
---------------------------------------------------------------------------------
运行结果:
1970-01-01 08:00:00
2021-05-11 10:55:10.129696
<class 'datetime.timedelta'>
18758 days, 2:55:10.129696
18758
<class 'datetime.datetime'>
2021-05-12 10:55:10.129696
参考地址: