昨天、今天、明天|Python用datetime库自定义函数返回日期格式字符串

今天的日期

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)
%H24小时制小时数(0-23)
%I12小时制小时数(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.timezonePython 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hann Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值