from datetime import datetime, timedelta from typing import Optional, Tuple class DateUtil: """日期时间工具类""" @staticmethod def get_current_time() -> datetime: """获取当前时间 Returns: 当前时间 """ return datetime.now() @staticmethod def format_date(date: datetime, fmt: str = '%Y-%m-%d %H:%M:%S') -> str: """格式化日期时间 Args: date: 日期时间对象 fmt: 格式化字符串 Returns: 格式化后的日期时间字符串 """ return date.strftime(fmt) @staticmethod def parse_date(date_str: str, fmt: str = '%Y-%m-%d %H:%M:%S') -> Optional[datetime]: """解析日期时间字符串 Args: date_str: 日期时间字符串 fmt: 格式化字符串 Returns: 解析后的日期时间对象,如果解析失败返回None """ try: return datetime.strptime(date_str, fmt) except ValueError: return None @staticmethod def get_date_range(start_date: datetime, end_date: datetime) -> Tuple[datetime, datetime]: """获取日期范围 Args: start_date: 开始日期 end_date: 结束日期 Returns: 包含开始日期和结束日期的元组 """ return (start_date, end_date) @staticmethod def add_days(date: datetime, days: int) -> datetime: """增加天数 Args: date: 日期时间对象 days: 要增加的天数 Returns: 增加天数后的日期时间对象 """ return date + timedelta(days=days) @staticmethod def get_week_start_end(date: datetime) -> Tuple[datetime, datetime]: """获取指定日期所在周的起始和结束日期 Args: date: 日期时间对象 Returns: 包含周起始日期和结束日期的元组 """ start = date - timedelta(days=date.weekday()) end = start + timedelta(days=6) return (start, end) @staticmethod def is_leap_year(year: int) -> bool: """判断是否为闰年 Args: year: 年份 Returns: bool: 是否为闰年 """ return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) @staticmethod def get_days_in_month(year: int, month: int) -> int: """获取指定月份的天数 Args: year: 年份 month: 月份 Returns: 指定月份的天数 """ if month == 2: return 29 if DateUtil.is_leap_year(year) else 28 elif month in [4, 6, 9, 11]: return 30 else: return 31