• Python 时间和时间戳相互转换


    1. import typing as t
    2. import time
    3. import datetime
    4. """
    5. 原文:
    6. python时间相互转换
    7. https://py-code.readthedocs.io/zh/latest/Python/time_utils/index.html
    8. """
    9. """
    10. # 1.1. 时间字符串转换为13位时间戳
    11. # 1.2. 时间字符串转换为datetime
    12. # 1.3. 时间戳转换为时间字符串
    13. # 1.4. 时间戳转换为datetime对象
    14. # 1.5. datetime对象转换为时间字符串
    15. # 1.6. datetime对象转换为13位时间戳
    16. """
    17. # 1.1. 时间字符串转换为13位时间戳
    18. def str_to_timestamp(str_time: str, time_format: str = "%Y-%m-%d %H:%M:%S") -> int:
    19. """
    20. 时间字符串转换为13位时间戳
    21. :param str_time: 时间字符串
    22. :param time_format: 时间字符串格式 default: %Y-%m-%d %H:%M:%S
    23. example: %Y-%m-%d
    24. :return: 13位时间戳
    25. Usage::
    26. >>> str_to_timestamp("2022-10-10", "%Y-%m-%d")
    27. 1665331200000
    28. >>> str_to_timestamp("2022-10-10 10:10:10")
    29. 1665367810000
    30. """
    31. try:
    32. time_array = time.strptime(str_time, time_format)
    33. return int(time.mktime(time_array)) * 1000
    34. except ValueError:
    35. raise ValueError("Invalid time format!")
    36. # 1.2. 时间字符串转换为datetime
    37. def str_to_datetime(str_time: str) -> datetime.datetime:
    38. """
    39. 时间字符串转换为datetime
    40. :param str_time: 时间字符串 格式为"2022-10-10 10:10:10" 或 "2022-10-10"
    41. :return: datetime对象
    42. Usage::
    43. >>> str_to_datetime("2022-10-10 10:10:10")
    44. 2022-10-10 10:10:10
    45. >>> str_to_datetime("2022-10-10")
    46. 2022-10-10 00:00:00
    47. """
    48. try:
    49. if " " in str_time:
    50. return datetime.datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S")
    51. else:
    52. return datetime.datetime.strptime(str_time, "%Y-%m-%d")
    53. except ValueError:
    54. raise ValueError("Invalid time format!")
    55. # 1.3. 时间戳转换为时间字符串
    56. def timestamp_to_str(timestamp: int, time_format: str = "%Y-%m-%d %H:%M:%S") -> str:
    57. """
    58. 时间戳转换为时间字符串
    59. :param timestamp: 时间戳
    60. :param time_format: 时间字符串格式 default: %Y-%m-%d %H:%M:%S
    61. :return: 时间字符串
    62. Usage::
    63. >>> timestamp_to_str(1665331200000, "%Y-%m-%d")
    64. 2022-10-10
    65. >>> timestamp_to_str(1665367810000)
    66. 2022-10-10 10:10:10
    67. """
    68. try:
    69. datetime_type = datetime.datetime.fromtimestamp(timestamp // 1000)
    70. return datetime_type.strftime(time_format)
    71. except (TypeError, ValueError):
    72. raise ValueError("Invalid timestamp format!")
    73. # 1.4. 时间戳转换为datetime对象
    74. def timestamp_to_datetime(timestamp: t.Union[int, float]) -> datetime.datetime:
    75. """
    76. 时间戳转换为datetime对象
    77. :param timestamp: 时间戳
    78. :return: datetime对象
    79. Usage::
    80. >>> timestamp_to_datetime(1645513117000)
    81. 2022-02-22 14:58:37
    82. >>> timestamp_to_datetime(1429417200.0)
    83. 2015-04-19 12:20:00
    84. """
    85. try:
    86. # 13位时间戳 毫秒格式转换
    87. if len(str(int(timestamp))) == 13:
    88. return datetime.datetime.fromtimestamp(timestamp // 1000)
    89. return datetime.datetime.fromtimestamp(timestamp)
    90. except ValueError:
    91. raise ValueError("Invalid time format!")
    92. # 1.5. datetime对象转换为时间字符串
    93. def datetime_to_str(datetime_obj: datetime.datetime) -> str:
    94. """
    95. datetime对象转换为时间字符串
    96. :param datetime_obj: datetime对象
    97. :return: 时间字符串
    98. Usage::
    99. >>> datetime_to_str(datetime.datetime.now()))
    100. 2022-02-22 14:46:04
    101. """
    102. try:
    103. return datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
    104. except AttributeError:
    105. raise ValueError("Invalid time format!")
    106. # 1.6. datetime对象转换为13位时间戳
    107. def datetime_to_timestamp(datetime_obj: datetime.datetime) -> int:
    108. """
    109. datetime对象转换为13位时间戳
    110. :param datetime_obj: datetime对象
    111. :return: 13位时间戳
    112. Usage::
    113. >>> datetime_to_timestamp(datetime.datetime.now()))
    114. 1645513117000
    115. """
    116. try:
    117. return int(datetime_obj.timestamp()) * 1000
    118. except AttributeError:
    119. raise ValueError("Invalid time format!")

    调用:

    1. # 1.1. 时间字符串转换为13位时间戳
    2. print(str_to_timestamp("2022-10-10", "%Y-%m-%d"))
    3. print(str_to_timestamp("2022-10-10 10:10:10"))
    4. '''
    5. 输出:
    6. 1665331200000
    7. 1665367810000
    8. '''
    9. # 1.2. 时间字符串转换为datetime
    10. print(str_to_datetime("2022-10-10 10:10:10"))
    11. print(str_to_datetime("2022-10-10"))
    12. '''
    13. 输出:
    14. 2022-10-10 10:10:10
    15. 2022-10-10 00:00:00
    16. '''
    17. # 1.3. 位时间戳转换为时间字符串
    18. print(timestamp_to_str(1665331200000, "%Y-%m-%d"))
    19. print(timestamp_to_str(1665367810000))
    20. '''
    21. 输出:
    22. 2022-10-10
    23. 2022-10-10 10:10:10
    24. '''
    25. # 1.4. 时间戳转换为datetime对象
    26. print(timestamp_to_datetime(1645513117000))
    27. print(timestamp_to_datetime(1429417200.0))
    28. '''
    29. 输出:
    30. 2022-02-22 14:58:37
    31. 2015-04-19 12:20:00
    32. '''
    33. # 1.5. datetime对象转换为时间字符串
    34. print(datetime_to_str(datetime.datetime.now()))
    35. '''
    36. 输出:
    37. 2024-06-21 13:43:46
    38. '''
    39. # 1.6. datetime对象转换为13位时间戳
    40. print(datetime_to_timestamp(datetime.datetime.now()))
    41. '''
    42. 输出:
    43. 1718948690000
    44. '''

  • 相关阅读:
    qml使用c++自定义listmodel数据
    【Vue3 源码解析】reactive 全家桶
    卷积神经网络提取图像特征的操作是怎样完成的
    【高级篇 / ZTNA】(7.0) ❀ 02. 测试版许可注册冲突的解决办法 ❀ FortiGate 防火墙
    SeamlessM4T—Massively Multilingual & Multimodal Machine Translation
    ADS中带通滤波器模型参数含义学习笔记
    WEIXIN day_04(8.19)小程序的事件处理、传参、常用API、生命周期、网络通信
    LainChain输出解析器
    图解redis(二)——持久化篇
    基于JAVA婴幼儿玩具共享租售平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  • 原文地址:https://blog.csdn.net/yudiandian2014/article/details/139859196