timezone.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. """
  2. 时区工具函数
  3. """
  4. from datetime import datetime, timezone, timedelta
  5. def get_beijing_time() -> datetime:
  6. """获取当前北京时间 (UTC+8)"""
  7. beijing_tz = timezone(timedelta(hours=8))
  8. return datetime.now(beijing_tz)
  9. def beijing_now() -> datetime:
  10. """获取当前北京时间 (UTC+8) - 带时区信息,用于展示/API"""
  11. return get_beijing_time()
  12. def beijing_now_naive() -> datetime:
  13. """获取当前北京时间 (UTC+8) - 无时区信息的 naive datetime,用于数据库存储与比较"""
  14. beijing_tz = timezone(timedelta(hours=8))
  15. return datetime.now(beijing_tz).replace(tzinfo=None)
  16. def datetime_to_beijing(dt: datetime) -> datetime:
  17. """将datetime对象转换为北京时间"""
  18. if dt.tzinfo is None:
  19. # 如果是naive datetime,假设它是本地时间,转换为北京时间
  20. beijing_tz = timezone(timedelta(hours=8))
  21. return dt.replace(tzinfo=timezone.utc).astimezone(beijing_tz)
  22. else:
  23. # 如果已经有时区信息,直接转换为北京时间
  24. beijing_tz = timezone(timedelta(hours=8))
  25. return dt.astimezone(beijing_tz)