python对时间的处理

relativedelta的使用基础

class relativedelta(object):
def __init__(self, dt1=None, dt2=None,
             years=0, months=0, days=0, leapdays=0, weeks=0,
             hours=0, minutes=0, seconds=0, microseconds=0,
             year=None, month=None, day=None, weekday=None,
             yearday=None, nlyearday=None,
             hour=None, minute=None, second=None, microsecond=None):

某日的后一天和前一天

from datetime import datetime as dt, timedelta
from dateutil.relativedelta import relativedelta



someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")

gap_date = relativedelta(days=1)
print(type(gap_date))

tomorrow_date = (someday + gap_date).strftime("%Y%m%d")
print("tomorrow_date----->", tomorrow_date)

yesterday_date = (someday - gap_date).strftime("%Y%m%d")
print("yesterday_date----->", yesterday_date)



<class 'dateutil.relativedelta.relativedelta'>

tomorrow_date-----> 20220326		# 某日第二天

yesterday_date-----> 20220324		# 某日前一天

某日的未来一周、近一周

from datetime import datetime as dt
from dateutil.relativedelta import relativedelta



someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
gap_date = relativedelta(weeks=1)

next_week = (someday + gap_date).strftime("%Y%m%d")
print("next_week----->", next_week)

last_week = (someday - gap_date).strftime("%Y%m%d")
print("last_week----->", last_week)


# 结果

next_week-----> 20220401

last_week-----> 20220318


最近一周、最近二周、最近一月、最近一年

from datetime import datetime as dt
from dateutil.relativedelta import relativedelta



someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")

# 最近一周
last1w = (someday - relativedelta(weeks=1)).strftime('%Y%m%d')
print(last1w)

# 最近二周
last2w = (someday - relativedelta(weeks=2)).strftime('%Y%m%d')
print(last2w)

# 最近一月
last1m = (someday - relativedelta(months=1)).strftime('%Y%m%d')
print(last1m)

# 最近一年
last1y = (someday - relativedelta(years=1)).strftime('%Y%m%d')
print(last1y)


# 结果

20220318
20220311
20220225
20210325

最近一自然周、最近两自然周

计算当前日期是一周的第几天

from datetime import datetime as dt, timedelta


someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")
week_num = someday.isoweekday()
print(week_num)

# 结果

5		# 代表本周的第五天,星期五的意思

计算最近一自然周

from datetime import datetime as dt
from dateutil.relativedelta import relativedelta



someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")


# 最近一自然周
natural_last1w = (someday - relativedelta(days=someday.isoweekday() - 1)).strftime('%Y%m%d')
print(natural_last1w)

# 结果
20220321

计算最近二自然周

from datetime import datetime as dt, timedelta
from dateutil.relativedelta import relativedelta



# 这个实现近一自然周的相对增量
relativedelta(days=someday.isoweekday() - 1)

#近二个自然周,如上日期增加7天即可
relativedelta(days=someday.isoweekday() + 6)

someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")

# 最近二自然周
natural_last2w = (someday - relativedelta(days=someday.isoweekday() + 6)).strftime('%Y%m%d')
print(natural_last2w)

# 结果:
20220314

最近一自然月、最近两自然月, 最近一自然年

根据datetime中replace的使用

from datetime import datetime as dt


someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")

re_day = someday.replace(day=1).strftime("%Y%m%d")
print(re_day)

re_month = someday.replace(month=1).strftime("%Y%m%d")
print(re_month)

re_august = someday.replace(month=8).strftime("%Y%m%d")
print(re_august)


# 结果

20220301
20220125
20220825

最近一自然月、最近二自然月


from datetime import datetime as dt

someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")

# 只需要日期,day对应的值改为1,即为当前月的第一天
natural_last1m = someday.replace(day=1).strftime('%Y%m%d')
print(natural_last1m)

# 结果
20220301
from datetime import datetime as dt
from dateutil.relativedelta import relativedelta

someday = "20220325"
someday = dt.strptime(str(someday), "%Y%m%d")

natural_last2m = (someday.replace(day=1) - relativedelta(months=1)).strftime("%Y%m%d")
print(natural_last2m)


# 结果
20220201

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会叫的寒蝉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值