今天的日期
datetime.date.today() 或 datetime.datetime.now()
>>> import datetime
>>> datetime.date.today()
datetime.date(2021, 4, 10)
>>> d=datetime.date.today()
>>> print(d)
2021-04-10
>>> type(d)
<class 'datetime.date'>
日期的偏移
用函数 datetime.timedelta(days=diff) 来实现:
>>> import datetime
>>> datetime.date.today()
datetime.date(2021, 4, 10)
>>> d=datetime.date.today()
>>>
>>> d+datetime.timedelta(5)
datetime.date(2021, 4, 15)
>>> d-datetime.timedelta(5)
datetime.date(2021, 4, 5)
>>> d+datetime.timedelta(-5)
datetime.date(2021, 4, 5)
日期型转日期字符串——
昨天、今天、明天的字符串形式
方法一:
用format()函数转换,日期分隔符换成“-”也可以: '{0:04}-{1:02}-{2:02}'
>>> def strDate(diff=0):
'''返回今天或前/后diff天的日期格式字符串'''
import datetime as dt
d=dt.date.today()+dt.timedelta(days=diff)
return '{0:04}/{1:02}/{2:02}'.format(d.year,d.month,d.day)
>>> strDate(-1)
'2021/04/09'
>>> strDate()
'2021/04/10'
>>> strDate(1)
'2021/04/11'
>>>
>>> strDate(3)
'2021/04/13'
>>> strDate(30)
'2021/05/10'
>>> strDate(31)
'2021/05/11'
>>> strDate(365)
'2022/04/10'
>>> strDate(366)
'2022/04/11'
>>> strDate(-3)
'2021/04/07'
>>> strDate(-30)
'2021/03/11'
>>> strDate(-31)
'2021/03/10'
>>> strDate(-365)
'2020/04/10'
>>> strDate(-366)
'2020/04/09'
>>>
方法二:除了用format()函数转换外,datetime 自带转换方法: .strftime()
dDate = dateString.strftime('格式化串')
>>> import datetime as dt
>>> d=dt.date.today()
>>> d
datetime.date(2021, 4, 10)
>>> type(d)
<class 'datetime.date'>
>>>
>>> d=d.strftime('%Y-%m-%d')
>>> d
'2021-04-10'
>>> type(d)
<class 'str'>
方法三: f-string (版本要求: Python3.6+)
>>> import datetime as dt
>>> d=dt.datetime.today()
>>> d
datetime.datetime(2021, 4, 10, 11, 59, 54, 531850)
>>> f'{d.year}/{d.month:02}/{d.day:02}'
'2021/04/10'
>>> f'{d.year}-{d.month:02}-{d.day:02}'
'2021-04-10'
日期字符串转日期型
datetime.datetime.strptime(dateString,'格式化串')
>>> dateString = '2020/3/23'
>>> datetime.datetime.strptime(dateString, '%Y/%m/%d')
datetime.datetime(2020, 3, 23, 0, 0)
>>> dateString = '2020-03-23'
>>> datetime.datetime.strptime(dateString, '%Y/%m/%d')
Traceback (most recent call last):
File "<pyshell#48>", line 1, in <module>
datetime.datetime.strptime(dateString, '%Y/%m/%d')
File "E:\Python\lib\_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "E:\Python\lib\_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '2020-03-23' does not match format '%Y/%m/%d'
>>> datetime.datetime.strptime(dateString, '%Y-%m-%d')
datetime.datetime(2020, 3, 23, 0, 0)
# 错: datetime.datetime.strptime('2020/03/23', '%Y-%m-%d')
# 错: datetime.datetime.strptime('2020-03-23', '%Y/%m/%d')
# 参数的格式必须前后一致,否则报错 time data format not match
附一: 日期格式化符
代码 | 说明 |
%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 | 本地月份名称的简写,%h也可以 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |
%% | %号本身 |
附二: datetime库类列表
类名称 | 描述 |
---|---|
datetime.date | 表示日期,常用的属性有:year, month和day |
datetime.time | 表示时间,常用属性有:hour, minute, second, microsecond |
datetime.datetime | 表示日期时间,date/time兼而有之 |
datetime.timedelta | 表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒 |
datetime.tzinfo | 时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。 |
datetime.timezone | Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量 |