Python获取前一日/周/月/年或相对任意时间
一、当前时间
# 使用time模块
import time
current_time = time.strftime("%Y-%m-%d %H%M%S", time.localtime())
# 使用datetime模块
import datetime
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H%M%S")
二、相对当前时间的前一天、前一周、前一月、前一年等
相对时间可以使用 timedelta() 和 relativedelta()。这里使用可以支持年 、月、日、周、时、分、秒的参数,功能更加强大的relativedelta()。
import datetime
from dateutil.relativedelta import relativedelta
# 减去一年
print((datetime.datetime.now() + relativedelta(years=-1)).strftime("%Y-%m-%d %H:%M:%S"))
# 减去一月
print((datetime.datetime.now() + relativedelta(months=-1)).strftime("%Y-%m-%d %H:%M:%S"))
# 减去一周
print((datetime.datetime.now() + relativedelta(weeks=-1)).strftime("%Y-%m-%d %H:%M:%S"))
# 减去一天
print((datetime.datetime.now() + relativedelta(days=-1)).strftime("%Y-%m-%d %H:%M:%S"))
# 减去一小时
print((datetime.datetime.now() + relativedelta(hours=-1)).strftime("%Y-%m-%d %H:%M:%S"))
# 减去一分钟
print((datetime.datetime.now() + relativedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M:%S"))
# 减去一秒钟
print((datetime.datetime.now() + relativedelta(seconds=-1)).strftime("%Y-%m-%d %H:%M:%S"))
三、相对(现在、或特定时间)任意时间
在相对当前时间之上自行封装了一个函数,很方便的返回相对现在或者特定时间点的任意相对时间。
print(relative_time(use_now=True)) # 现在
print(relative_time(use_now=True, days=-1)) # 昨天的现在
print(relative_time(use_now=True, years=-1)) # 一年前的现在
print(relative_time(use_now=True, days=-1, months=-1)) # 上个月的前一天
# 2020-09-30 12:00:00后一天
print(relative_time(use_now=False, date_string='2020-09-30 12:00:00', date_format="%Y-%m-%d %H:%M:%S", days=1))
# 2020-09-30 前一年的后两星期
print(relative_time(use_now=False, date_string='2020-09-30', date_format="%Y-%m-%d", years=-1, weeks=2))
# 封装操作
def relative_time(use_now=True, date_string=None, date_format=None, years=0, months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0, seconds=0, microseconds=0):
relative_delta = relativedelta(years=years, months=months, days=days, leapdays=leapdays, weeks=weeks, hours=hours,
minutes=minutes, seconds=seconds, microseconds=microseconds)
_date = datetime.datetime.now() if use_now else datetime.datetime.strptime(date_string, date_format)
return (_date + relative_delta).strftime("%Y-%m-%d %H:%M:%S")