在应用中日期、时间、时间戳(时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量),是会经常要取用的数据,比如得到今天的日期、
星期、一个月的起始和结束等,时间戳经常会用到数据签名或者数据流水号等;使用日期和时间,需要导入库datetime、time,
- time 是继于系统Unix Timestamp的,因此,使用time可能在不同的平台,有差异;日期范围限定在1970 - 2038 之间
- datetime 可以理解为time的升级版,弥补了time的不足,提供了更丰富的功能函数
日期和时间,因为存在不同系统的差异,因此常会用到格式化,python提供的日期格式化符号主要有
格式 | 含义 |
---|---|
%a | 本地(locale)简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化月份名称 |
%c | 本地相应的日期和时间表示 |
%d | 一个月中的第几天(01-31) |
%H | 一天中的第几个小时(24小时制,00-23) |
%I | 第几个小时(12小时制,01-12) |
%j | 一年中的第几天(001-366) |
%m | 月份(01-12) |
%M | 分钟数(00-59) |
%p | 本地am或者pm的相应符 |
%S | 秒(01-61) |
%U | 一年中的星期数(00-53,星期天是首日)第一个星期天之前的所有天数都放在第0周。 |
%w | 一个星期中的第几天(0-6,0是周日) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始 |
%x | 本地相应日期 |
%X | 本地相应时间 |
%y | 去掉世纪的年份(00-99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在为空字符) |
%% | '%'字符 |
这些格式化字符,不需要做记忆,会通过下面的代码进行讲解 |
1 import time
2
3 # 打印一个当前的时间戳
4 t = time.time()
5 print(t)
6
1650187292.611
1 import time
2
3 # 返回当前系统的时间
4 t = time.localtime()
5 print(t)
6
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=17, tm_hour=17, tm_min=29, tm_sec=6, tm_wday=6, tm_yday=107, tm_isdst=0)
可以看到,localtime返回的是一个时间的元组,里面包含了,当前时间的年、月、日、小时、分秒等,当然看着和熟悉的电脑日期格式不太一样.
1 # 练习题 试着用前面学习到的四舍五入,对上面的时间戳取个整; 取出返回的元组时间里的年
2
datetime根据字面意思主是date和time的组合, datetime模块,主要包含了5个类:
- datetime.date:日期操作的类
- datetime.datetime:日期时间操作的类
- datetime.time:时间操作的类
- datetime.timedelta:时间间隔,即两个时间点的间隔
- datetime.tzinfo:时区的相关信息
1 import datetime as dt
2 # 获取今天的日期
3 today = dt.date.today()
4 print('今天是:', today)
5
6 print('今年是:', today.year)
7
今天是: 2022-04-17
今年是: 2022
1 import datetime as dt
2 # 获取当前的时间
3 now = dt.datetime.now()
4 print(now)
5 # 用到了上面的格式化字符,
6 print(now.strftime('%Y'))
7
2022-03-21 14:21:43.026081
2022
1 # 练习题 试着输出更多格式的时间
2
# 如何取到昨天的日期?
1 import datetime as dt
2
3 today = dt.date.today()
4
5 print('今天是:', today)
6 yesterday = today - dt.timedelta(days=-1)
7 print('昨天是:', yesterday)
8
今天是: 2022-04-17
昨天是: 2022-04-18
1 # 练习题 算一下前天的日期
2