time模块可以很好地获取时间戳(time.time()),并进行格式化处理。但是,如果想要以更方便的格式显示日期,或者对日期进行加减运算(如获取167天前是什么日期,89天后是什么日期),time模块就无能为力了。这个时候就需要用到datetime模块。
datetime模块也有自己的datetime数据类型,其值表示一个特定的时刻。如
import datetime # 导入模块
datetime.datetime.now() # 获取当前时间
t0 = datetime.datetime(2020,1,1,13,45,34)
t0.year,t0.month,t0.day,t0.hour,t0.minute,t0.second # 年,月,日,时,分,秒
日期间加减运算
datetime模块中提供了time.delta数据类型,该类型表示一段时间,而非一个具体的时刻,使用可以用于时间段之间的加减。如
delta = datetime.timedelta(days = 89,hours = 10,minutes = 3,seconds = 47)
# 这里delta表示89天,10小时,3分钟,47秒的一段时间
dt = datetime.datetime.now() + delta
dt
现在来回答我们开头提出的两个问题。
- 167天前是什么日期
dt = datetime.datetime.now() + datetime.timedelta(days = -167)
dt
- 89天后是什么日期
dt = datetime.datetime.now() + datetime.timedelta(days = 89)
dt
格式化日期
将datetime类型转换为字符串
方法:使用strftime函数
dt = datetime.datetime(2020,2,14,15,3,27)
res = dt.strftime('%Y-%m-%d %H:%M:%S')
# 或者 res = datetime.datetime.strftime(dt,'%Y-%m-%d %H:%M:%S')
print(type(res),res)
将字符串转换为datetime类型
方法:使用strptime函数
dtstr = '2020-02-14 15:03:27'
res = datetime.datetime.strptime(dtstr,'%Y-%m-%d %H:%M:%S')
print(type(res),res)
日期格式化符号
%y | 两位数的年份表示(00-99) |
---|---|
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00-59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |