time.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # coding=utf-8
  2. """
  3. 时间工具模块 - 统一时间处理函数
  4. """
  5. from datetime import datetime
  6. from typing import Optional
  7. import pytz
  8. # 默认时区
  9. DEFAULT_TIMEZONE = "Asia/Shanghai"
  10. def get_configured_time(timezone: str = DEFAULT_TIMEZONE) -> datetime:
  11. """
  12. 获取配置时区的当前时间
  13. Args:
  14. timezone: 时区名称,如 'Asia/Shanghai', 'America/Los_Angeles'
  15. Returns:
  16. 带时区信息的当前时间
  17. """
  18. try:
  19. tz = pytz.timezone(timezone)
  20. except pytz.UnknownTimeZoneError:
  21. print(f"[警告] 未知时区 '{timezone}',使用默认时区 {DEFAULT_TIMEZONE}")
  22. tz = pytz.timezone(DEFAULT_TIMEZONE)
  23. return datetime.now(tz)
  24. def format_date_folder(
  25. date: Optional[str] = None, timezone: str = DEFAULT_TIMEZONE
  26. ) -> str:
  27. """
  28. 格式化日期文件夹名 (ISO 格式: YYYY-MM-DD)
  29. Args:
  30. date: 指定日期字符串,为 None 则使用当前日期
  31. timezone: 时区名称
  32. Returns:
  33. 格式化后的日期字符串,如 '2025-12-09'
  34. """
  35. if date:
  36. return date
  37. return get_configured_time(timezone).strftime("%Y-%m-%d")
  38. def format_time_filename(timezone: str = DEFAULT_TIMEZONE) -> str:
  39. """
  40. 格式化时间文件名 (格式: HH-MM,用于文件名)
  41. Windows 系统不支持冒号作为文件名,因此使用连字符
  42. Args:
  43. timezone: 时区名称
  44. Returns:
  45. 格式化后的时间字符串,如 '15-30'
  46. """
  47. return get_configured_time(timezone).strftime("%H-%M")
  48. def get_current_time_display(timezone: str = DEFAULT_TIMEZONE) -> str:
  49. """
  50. 获取当前时间显示 (格式: HH:MM,用于显示)
  51. Args:
  52. timezone: 时区名称
  53. Returns:
  54. 格式化后的时间字符串,如 '15:30'
  55. """
  56. return get_configured_time(timezone).strftime("%H:%M")
  57. def convert_time_for_display(time_str: str) -> str:
  58. """
  59. 将 HH-MM 格式转换为 HH:MM 格式用于显示
  60. Args:
  61. time_str: 输入时间字符串,如 '15-30'
  62. Returns:
  63. 转换后的时间字符串,如 '15:30'
  64. """
  65. if time_str and "-" in time_str and len(time_str) == 5:
  66. return time_str.replace("-", ":")
  67. return time_str