72 lines
2.7 KiB
Python
72 lines
2.7 KiB
Python
#!/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年及以前的日期 |