Python获取n天/周/月/年前、后的时间

一:常用的类型转换

1. 将时间格式<class 'datetime.datetime'>转化成字符串类型
主角:datetime.datetime.strftime(),datetime.datetime.strptime()
import datetime

"""
将时间格式转化成字符串,根据自己需求使用对应的占位符,常用的时间占位符如下:

# %y 两位数的年份表示(00-99)
# %Y 四位数的年份表示(000-9999)
# %m 月份(01-12)
# %d 月内中的一天(0-31)
# %H 24小时制小时数(0-23)
# %I 12小时制小时数(01-12)
# %M 分钟数(00=59)
# %S 秒(00-59)
# %f 毫秒(六位小数)

注:需要更多查看strftime参数即可
"""
# 构造时间格式对象
now = datetime.datetime.now()  # 获取当前时间,类型: <class 'datetime.datetime'>
now_str = now.strftime("%Y-%m-%d %H:%M:%S")  # strftime(self, fmt: str),查看strftime方法可得需要提供格式化类型

# 将字符串转化为时间格式
dt = datetime.datetime.strptime(now_str ,"%Y-%m-%d %H:%M:%S") 
# 或许有人使用过以下方式:
# dt = now.strptime(now_str ,"%Y-%m-%d %H:%M:%S"),原理上都是使用的<class 'datetime.datetime'>类型,结果和now的值无关,只和格式化的字符串now_str有关
2. 获取一定时间范围内的随机时间
主角:time.mktime()
# 获取9月-10月随机时间
start_time = (2022, 9, 1, 0, 0, 0, 0, 0, 0)
end_time = (2022, 10, 1, 0, 0, 0, 0, 0, 0)
start = time.mktime(start_time)  # 生成开始时间戳
end = time.mktime(end_time)  # 生成结束时间戳
res_time = random.randint(start, end)  # 在开始和结束时间戳中随机取出一个,randint()会返回一个int类型对象,所以可以把start,end转换成int类型再执行randint:random.randint(int(start), int(end))
# 一天86400秒,想把生成的时间再加一个随机事件,可以如下操作,localtime与mktime功能相反,是把时间戳转化成时间元组,转化成元组之后再根据自己需求处理即可
date_tuple = time.localtime(res_time + random.randint(10000,100000))  # 将时间戳生成时间元组
date = time.strftime("%Y-%m-%d %H:%M:%S", date_tuple)  # 将时间元组转成格式化字符串,结果:2022-09-11 04:29:42
3. 获取n天/周/月/年前的时间
主角:datetime.timedelta()
import datetime

# 获取五天前的时间
fiveDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 5))
# 可以根据自己需求随意更改,timedelta参数如下(以下为timedelta构造函数源码):
'''
def __new__(cls, days=0, seconds=0, microseconds=0,
                milliseconds=0, minutes=0, hours=0, weeks=0):
'''
# 获取一周前的时间
aWeekAgo = (datetime.datetime.now() - datetime.timedelta(weeks = 1))

# 根据timedelta构造函数,没有月和年的参数,可以用以下方式,比如一年前
n = 1
aYearAgo = datetime.datetime.now().replace(year=datetime.now().year - n).strftime("%Y-%m-%d %H:%M:%S")

注:以上列了几个常用的方法,有其他疑问欢迎留言 ^_^

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值