data_factory/test_data/field_sqls/get_time_random.py

72 lines
2.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2025/3/20 16:47
# @Author : AngesZhu
# @File : get_time_random.py
# @Desc : 随机时间获取函数
from typing import Any
import random
from datetime import datetime, timedelta
from utils.logger_utils import logger
def get_time(format: str="%Y-%m-%d", start: str=None, end: str=None, min_date: str=None, max_date: str=None):
# 如果没有提供start和end则使用默认的日期范围
if start is None:
start = "2024-01-01"
if end is None:
end = datetime.now().strftime("%Y-%m-%d")
# 将字符串日期转换为datetime对象
start = datetime.strptime(start, "%Y-%m-%d")
end = datetime.strptime(end, "%Y-%m-%d")
# 如果提供了min_date或max_date则调整start和end
if min_date is not None:
min_date = datetime.strptime(min_date, "%Y-%m-%d")
start = max(start, min_date)
if max_date is not None:
max_date = datetime.strptime(max_date, "%Y-%m-%d")
end = min(end, max_date)
# 确保start不大于end
if start > end:
raise ValueError("start must be less than or equal to end")
# 计算日期范围的总天数
delta = (end - start).days
# 生成随机天数
random_days = random.randint(0, delta)
# 生成随机日期
random_date = start + timedelta(days=random_days)
# 返回格式化后的日期字符串
return random_date.strftime(format)
def get_time_random(format: str = "%Y-%m-%d", start: str = None, end: str = None, min_date: str = None,
max_date: str = None, limit: str = 10, *args, **kwargs) -> Any:
# 随机时间获取函数
"""
生成随机日期字符串。
:param format: 日期格式化字符串,默认为"%Y-%m-%d"
:param start: 日期区间的开始日期,格式为"YYYY-MM-DD"
:param end: 日期区间的结束日期,格式为"YYYY-MM-DD"
:param min_date: 生成日期的最小日期,格式为"YYYY-MM-DD"
:param max_date: 生成日期的最大日期,格式为"YYYY-MM-DD"
:return: 格式化后的随机日期字符串
"""
try:
return True, [get_time(format, start, end, min_date, max_date) for i in range(limit)]
except Exception as e:
return False, e
if __name__ == '__main__':
# 示例用法
print(get_time()) # 随机生成一个日期字符串,格式为"YYYY-MM-DD"
print(get_time(format="%Y-%m-%d")) # 随机生成一个日期字符串,格式为"YYYY/MM/DD"
print(get_time(start="2020-01-01", end="2025-12-31")) # 随机生成2020年的日期
print(get_time(min_date="2023-01-01")) # 随机生成2023年及以后的日期
print(get_time(max_date="2025-12-31")) # 随机生成2022年及以前的日期