【问题标题】:Convert python datetime to timestamp in milliseconds以毫秒为单位将 python 日期时间转换为时间戳
【发布时间】:2017-05-28 21:08:18
【问题描述】:

如何将格式为20.12.2016 09:38:42,76 的人类可读时间转换为毫秒 的Unix 时间戳?我发现了很多类似的问题,但没有找到这个特定的问题/答案。

【问题讨论】:

  • 您需要向datetime.datetime.strptime 提供适当的格式字符串。见the docs。

标签: python datetime unix-timestamp


【解决方案1】:

其中很多答案都没有保留日期时间的毫秒数。这对我有用

def datetime_to_ms_epoch(dt):
    microseconds = time.mktime(dt.timetuple()) * 1000000 + dt.microsecond
    return int(round(microseconds / float(1000)))

【讨论】:

    【解决方案2】:

    对于那些在不解析和丢失毫秒的情况下搜索答案的人, 给定dt_obj 是一个日期时间:

    仅限python3,优雅

    int(dt_obj.timestamp() * 1000)
    

    python2 和 python3 都兼容:

    import time
    
    int(time.mktime(dt_obj.utctimetuple()) * 1000 + dt_obj.microsecond / 1000)
    

    【讨论】:

      【解决方案3】:

      对于 Python2.7 - 修改 MYGz 的答案以不去除毫秒:

      from datetime import datetime
      
      d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s.%f')
      d_in_ms = int(float(d)*1000)
      print(d_in_ms)
      
      print(datetime.fromtimestamp(float(d)))
      

      输出:

      1482248322760
      2016-12-20 09:38:42.760000
      

      【讨论】:

        【解决方案4】:

        您需要使用strptime 解析您的时间格式。

        >>> import time
        >>> from datetime import datetime
        >>> ts, ms = '20.12.2016 09:38:42,76'.split(',')
        >>> ts
        '20.12.2016 09:38:42'
        >>> ms
        '76'
        >>> dt = datetime.strptime(ts, '%d.%m.%Y %H:%M:%S')
        >>> time.mktime(dt.timetuple())*1000 + int(ms)*10
        1482223122760.0
        

        【讨论】:

          【解决方案5】:

          在 Python 3 中,这可以分两步完成:

          1. 将时间字符串转换为datetime对象
          2. 将 datetime 对象的时间戳乘以 1000 以将其转换为毫秒。

          例如这样:

          from datetime import datetime
          
          dt_obj = datetime.strptime('20.12.2016 09:38:42,76',
                                     '%d.%m.%Y %H:%M:%S,%f')
          millisec = dt_obj.timestamp() * 1000
          
          print(millisec)
          

          输出:

          1482223122760.0
          

          strptime 接受您的时间字符串和格式字符串作为输入。时间字符串(第一个参数)指定 what 您实际上想要转换为 datetime 对象。格式字符串(第二个参数)指定您传递的字符串的实际 格式。

          这里是来自official documentation的格式说明符的解释:

          • %d - 以零填充十进制数表示的月份中的日期。
          • %m - 以零填充十进制数表示的月份。
          • %Y - 年份,世纪为十进制数
          • %H - 小时(24 小时制),用零填充十进制数表示。
          • %M - 用零填充十进制数表示的分钟。
          • %S - 秒作为零填充十进制数。
          • %f - 微秒,十进制数,左侧补零。

          【讨论】:

          • 嘿,谢谢。不幸的是,我收到错误“AttributeError:'datetime.datetime'对象没有属性'timestamp'”。可能是因为我使用的是 Python 2.7?
          • 是的。使用 MYGz 对 Python 2.7 的回答
          【解决方案6】:

          对于 Python2.7

          您可以将其格式化为秒,然后乘以 1000 转换为毫秒。

          from datetime import datetime
          
          d = datetime.strptime("20.12.2016 09:38:42,76", "%d.%m.%Y %H:%M:%S,%f").strftime('%s')
          d_in_ms = int(d)*1000
          print(d_in_ms)
          
          print(datetime.fromtimestamp(float(d)))
          

          输出:

          1482206922000
          2016-12-20 09:38:42
          

          【讨论】:

          • 嘿,谢谢!我复制并粘贴您的代码并得到“ValueError: Invalid format string”。
          • @Tom Python 版本?它在 Python2.7.6 上为我工作
          • 我使用的是 Python 2.7.12。
          • 虽然去掉了 ,76 所以它并没有解决问题。
          • 感谢 python 2.7 的回答
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-04
          • 1970-01-01
          • 2020-06-24
          • 2022-11-27
          • 2015-06-17
          • 2016-04-25
          相关资源
          最近更新 更多