python 自己写的关于时间很有用的函数

输入日期,以及频率,比如3周,6月,输出日期前3周,6月的日期

from datetime import datetime
from datetime import timedelta
import calendar

#输入日期,以及频率默认1周(日、周、月或者年),输出往前日、周、月、年的日期
def get_pre_date(Date, fre = '1w'):
    end_date = datetime.strptime(Date, '%Y%m%d')
    if fre.endswith('w'):
        start_date = end_date - timedelta(int(fre[: -1]) * 7)
        start_date = start_date.strftime('%Y%m%d')
    elif fre.endswith('d'):
        start_date = end_date - timedelta(int(fre[: -1]))
        start_date = start_date.strftime('%Y%m%d')
    elif fre.endswith('m'):
        start_date_year = end_date.year - int(fre[: -1])// 12
        #余数
        remainder = int(fre[: -1])% 12
        delta_month = end_date.month - remainder        
        if delta_month <= 0:
            start_date_year -= 1
            start_date_month = 12 + remainder
        else:
            start_date_month = end_date.month - remainder
        #判断日子,通过月份来判断
        delta_day =calendar.monthrange(end_date.year, end_date.month)[1] - end_date.day
        start_date_day = calendar.monthrange(start_date_year, start_date_month)[1] - delta_day
        start_date = str(start_date_year) + str(start_date_month).zfill(2) + str(start_date_day)
    elif fre.endswith('y'):
        start_date_year = end_date.year - int(fre[: -1])
        start_date = str(start_date_year) + str(end_date.month).zfill(2) + str(end_date.day)
    else:
        print('输入:"nd", "nw", "nm", "ny",其中"n"是数字\n')
    return start_date

来运行一下,获取2015年8月31号前16月的具体日期

get_pre_date('20150831', '16m')

输出如下,是2014年4月30号

转载于:https://www.cnblogs.com/Mr-ZeroW/p/7873298.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值