refactor(test): 重构测试套件结构并优化测试配置
feat(test-suite): 新增测试套件模块,包含API测试客户端和测试配置 fix(api): 修复数据库实体和仓库的删除操作返回值 style(api): 统一数据库表名和字段命名 perf(api): 添加缓存注解提升配置查询性能 test(api): 添加H2测试数据库配置支持 chore: 清理旧的测试文件和脚本
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
"""
|
||||
日期时间工具类
|
||||
|
||||
提供日期时间相关的工具方法
|
||||
|
||||
作者: 张翔
|
||||
日期: 2026-04-01
|
||||
"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Optional
|
||||
import pytz
|
||||
|
||||
|
||||
class DateHelper:
|
||||
"""日期时间工具类"""
|
||||
|
||||
@staticmethod
|
||||
def format_datetime(dt: datetime, fmt: str = "%Y-%m-%d %H:%M:%S") -> str:
|
||||
"""
|
||||
格式化日期时间
|
||||
|
||||
Args:
|
||||
dt: datetime对象
|
||||
fmt: 格式字符串
|
||||
|
||||
Returns:
|
||||
格式化后的字符串
|
||||
"""
|
||||
if dt is None:
|
||||
return ""
|
||||
return dt.strftime(fmt)
|
||||
|
||||
@staticmethod
|
||||
def parse_datetime(date_string: str, fmt: str = "%Y-%m-%d %H:%M:%S") -> Optional[datetime]:
|
||||
"""
|
||||
解析日期时间字符串
|
||||
|
||||
Args:
|
||||
date_string: 日期时间字符串
|
||||
fmt: 格式字符串
|
||||
|
||||
Returns:
|
||||
datetime对象,解析失败返回None
|
||||
"""
|
||||
try:
|
||||
return datetime.strptime(date_string, fmt)
|
||||
except (ValueError, TypeError):
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def days_between(start_date: datetime, end_date: datetime) -> int:
|
||||
"""
|
||||
计算两个日期之间的天数
|
||||
|
||||
Args:
|
||||
start_date: 开始日期
|
||||
end_date: 结束日期
|
||||
|
||||
Returns:
|
||||
天数差
|
||||
"""
|
||||
if start_date is None or end_date is None:
|
||||
return 0
|
||||
delta = end_date - start_date
|
||||
return delta.days
|
||||
|
||||
@staticmethod
|
||||
def utc_to_local(utc_time: datetime, timezone: str = "Asia/Shanghai") -> datetime:
|
||||
"""
|
||||
UTC时间转本地时间
|
||||
|
||||
Args:
|
||||
utc_time: UTC时间
|
||||
timezone: 时区名称
|
||||
|
||||
Returns:
|
||||
本地时间
|
||||
"""
|
||||
if utc_time is None:
|
||||
return None
|
||||
|
||||
utc_tz = pytz.UTC
|
||||
local_tz = pytz.timezone(timezone)
|
||||
|
||||
if utc_time.tzinfo is None:
|
||||
utc_time = utc_tz.localize(utc_time)
|
||||
|
||||
return utc_time.astimezone(local_tz)
|
||||
|
||||
@staticmethod
|
||||
def get_current_timestamp() -> int:
|
||||
"""
|
||||
获取当前时间戳(秒)
|
||||
|
||||
Returns:
|
||||
当前时间戳
|
||||
"""
|
||||
return int(datetime.now().timestamp())
|
||||
|
||||
@staticmethod
|
||||
def add_days(dt: datetime, days: int) -> datetime:
|
||||
"""
|
||||
日期加减天数
|
||||
|
||||
Args:
|
||||
dt: 日期
|
||||
days: 天数(可为负数)
|
||||
|
||||
Returns:
|
||||
新日期
|
||||
"""
|
||||
if dt is None:
|
||||
return None
|
||||
return dt + timedelta(days=days)
|
||||
Reference in New Issue
Block a user