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