Files
novalon-manage-system/test-suite/utils/date_helper.py
T
张翔 1e3dc11d59 refactor(test): 重构测试套件结构并优化测试配置
feat(test-suite): 新增测试套件模块,包含API测试客户端和测试配置
fix(api): 修复数据库实体和仓库的删除操作返回值
style(api): 统一数据库表名和字段命名
perf(api): 添加缓存注解提升配置查询性能
test(api): 添加H2测试数据库配置支持
chore: 清理旧的测试文件和脚本
2026-04-01 20:57:24 +08:00

116 lines
2.7 KiB
Python

"""
日期时间工具类
提供日期时间相关的工具方法
作者: 张翔
日期: 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)