Python:日期相关问题总结

计算某一时间点某一时间段前后的时间

比如:

计算过去两年/一年/半年/三个月/一个月内的数据量
计算合同预计签署日期在未来一年内的数据量

用 (int(str) +/- n).strftime()

def past24Mons(time):
    time = time.replace('-', '')
    past24ago = '{}{}'.format(int(datetime.datetime.now().strftime('%Y%m%d')[:4]) - 2,
                              datetime.datetime.now().strftime('%m%d'))
    return time >= past24ago
def past12Mons(time):
    time = time.replace('-', '')
    past12ago = '{}{}'.format(int(datetime.datetime.now().strftime('%Y%m%d')[:4]) - 1,
                                 datetime.datetime.now().strftime('%m%d'))
    return time >= past12ago
def one_year_ago(time):
    date = {}
    for i in time:
        tmp = str(int(i[:4]) - 1) + i[4:]
        date[i] = tmp
    return date

用timedelta/relativedelta

from datetime import datetime,timedelta
from dateutil.relativedelta import relativedelta
def past6Mon(time):
    time = time.replace('-', '')
    past6ago = datetime.date.today() - datetime.timedelta(days=180)
    past6ago = past6ago.strftime('%Y%m%d')
    return time >= past6ago
def past1Mon(time):
    time = time.replace('-', '')
    past1ago = datetime.date.today() - datetime.timedelta(days=30)
    past1ago = past1ago.strftime('%Y%m%d')
    return time >= past1ago
# 获得当前时间
now_time = datetime.now()
print(now_time, "当前时间")
 
# 方法一
def change_time(time_str, days=0, hours=0,  minutes=0):
    if type(time_str) == str:
        time_str = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
    ret = time_str + timedelta(days=days, hours=hours, minutes=minutes)
    return ret
# 7天后
ret1 = change_time(now_time, days=7)
print(ret1, "7天后")

# 方法二
def delay_time(time_str, years=0, months=0, days=0, hours=0, minutes=0, seconds=0):
    if type(time_str) == str:
        time_str = datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
    ret = time_str + relativedelta(years=years, months=months, days=days, hours=hours, minutes=minutes, seconds=seconds)
    return ret
 
 
# 1个月前
ret2 = delay_time(now_time, months=-1)
print(ret2, '一个月前')
 
# 注意: relativedelta 还有一种用法
ret3 = now_time + relativedelta(day=10)  # 注意这里是day, 上边是days
print(ret3)     # 此时获得的时间是10号的, 也就是上边的day是几他就是几号,
                # 有意思的是, 你是平年2月传一个31, 得到的结果是28
 
 
2020-12-25 16:08:15.946219 当前时间
2021-01-01 16:08:15.946219 7天后
2020-11-25 16:08:15.946219 一个月前
2020-12-10 16:08:15.946219
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值