| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- """
- 时区工具模块
- 提供东八区(Asia/Shanghai,UTC+8,无夏令时)时间处理功能
- """
- from datetime import datetime, timedelta, timezone
- # 东八区:Asia/Shanghai 不使用夏令时,固定 UTC+8 即可
- CHINA_TZ = timezone(timedelta(hours=8))
- UTC = timezone.utc
- def now_china() -> datetime:
- """
- 获取当前东八区时间(带时区信息)
- Returns:
- datetime: 当前东八区时间
- """
- return datetime.now(CHINA_TZ)
- def now_china_naive() -> datetime:
- """
- 获取当前东八区时间(不带时区信息,用于数据库存储)
- Returns:
- datetime: 当前东八区时间(naive datetime)
- """
- return datetime.now(CHINA_TZ).replace(tzinfo=None)
- def to_china_time(dt: datetime) -> datetime:
- """
- 将任意时区的时间转换为东八区时间
- Args:
- dt: 输入的datetime对象
- Returns:
- datetime: 转换后的东八区时间
- """
- if dt.tzinfo is None:
- dt = dt.replace(tzinfo=UTC)
- return dt.astimezone(CHINA_TZ)
- def utc_to_china_naive(dt: datetime) -> datetime:
- """
- 将UTC时间转换为东八区时间(不带时区信息)
- Args:
- dt: UTC时间
- Returns:
- datetime: 东八区时间(naive datetime)
- """
- if dt.tzinfo is None:
- dt = dt.replace(tzinfo=UTC)
- return dt.astimezone(CHINA_TZ).replace(tzinfo=None)
|