chinapnr / fishbase

自主开发、整理的一套 Python 基础函数库,涵盖 system 系统增强包、logger 日志记录增强包、file 文件处理增强包、 date 日期处理函数包、data 数据信息处理函数包、csv 处理增强函数包、crypt 加密/编码增强包等,可减少程序开发工作量、降低引用复杂度。
MIT License
94 stars 29 forks source link

fish_date 代码优化 #287

Closed wingfish closed 3 years ago

wingfish commented 3 years ago

2021.5.27 针对fish_date 包中的代码进行优化,发现原来一些代码写法不够优雅和简洁,单元测试容易产生潜在问题,函数命名和文档等也存在一些问题。

wingfish commented 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;

wingfish commented 3 years ago

gen_date_by_year() 修改为 random_date_by_year()