Closed wingfish closed 3 years ago
原来函数,
def gen_date_by_range(begin_date, end_date, date_format="%Y-%m-%d")
指定一个日期范围,随机生成区间内的某一个日期,该区间为闭区间
原来函数名、docstring、参数 都有点小问题,包括入参时候的日期格式和返回时的输出格式默认其实是不一致的。
# 设置开始日期
begin_date_info = begin_date.split("-")
begin_date_info = [int(x) for x in begin_date_info]
begin_date_info.extend([0, 0, 0, 0, 0, 0])
begin_date_tuple = tuple(begin_date_info)
# 设置结束日期
end_date_info = end_date.split("-")
end_date_info = [int(x) for x in end_date_info]
end_date_info.extend([23, 59, 59, 59, 0, 0])
end_date_tuple = tuple(end_date_info)
try:
# 生成开始时间戳
start_timestamp = time.mktime(begin_date_tuple)
# 生成结束时间戳
end_timestamp = time.mktime(end_date_tuple)
except TypeError as e:
raise TypeError(e, "begin_date/end_date format error")
# 在开始和结束时间戳中随机取出一个
rand_timedelta = random.randint(start_timestamp, end_timestamp)
# 将时间戳生成时间元组
date_tuple = time.localtime(rand_timedelta)
# 将时间元组转成格式化字符串
date_str = time.strftime(date_format, date_tuple)
return date_str
实现逻辑比较啰嗦,修改为:
d0 = datetime.strptime(begin_date, date_format)
d1 = datetime.strptime(end_date, date_format)
random_date = d0 + (d1-d0)*random.random()
return datetime.strftime(random_date, "%Y%m%d")
2021.5.30 修改代码、docstring 等,函数名不符合规范,应该为 random_date_by_range,考虑先兼容,补充 ut 的 tc;
gen_date_by_year() 修改为 random_date_by_year()
2021.5.27 针对fish_date 包中的代码进行优化,发现原来一些代码写法不够优雅和简洁,单元测试容易产生潜在问题,函数命名和文档等也存在一些问题。