一:常用的类型转换
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")
注:以上列了几个常用的方法,有其他疑问欢迎留言 ^_^