【问题标题】:Convert date, datetime to timestamp将日期、日期时间转换为时间戳
【发布时间】:2010-05-03 00:14:50
【问题描述】:

如何在 Python 中从 datedatetime 生成精确到毫秒的时间戳?

有大量的方法和方法可以做到这一点,我想知道哪种是最 Pythonic 的方式。

【问题讨论】:

    标签: datetime python-3.x python


    【解决方案1】:

    以下内容适用于我的目的:

    从毫秒时间戳到日期时间

    import datetime
    timestamp #=> 1317912250955
    dt = datetime.datetime.fromtimestamp(time/1000.0)
    dt #=> datetime.datetime(2011, 10, 6, 10, 44, 10, 955000)
    

    从日期时间到毫秒时间戳

    import time
    dt #=> datetime.datetime(2011, 10, 6, 10, 44, 10, 955000)
    timestamp = int((time.mktime(dt.timetuple()) + dt.microsecond/1000000.0)*1000)
    timestamp #=> 1317912250955
    

    【讨论】:

    • 小心,最后一个操作将给定的日期时间解释为本地时间,而不是 UTC!
    【解决方案2】:

    Python 中的日期对象不保留挂钟时间的概念。如果你想获取一个日期对象并获得一个毫秒的表示,它会全是 0。

    datetime 模块跳过毫秒并在其格式中支持微秒。因此,当您打印日期时间或在解释器中查看日期时间时,最后一个字段是微秒。如果你想要毫秒,你可以将该字段除以 1000。

    以下是 Python 3.2b2 解释器会话中的几个示例。这里有一些额外的东西,所以你可以看到我到达时间戳的基本路线。它不能被视为reading the docs的替代品:

    >>> x = datetime.datetime.today()
    >>> y = datetime.date.today()
    >>> x
    datetime.datetime(2011, 2, 6, 8, 2, 9, 465714)
    >>> y
    datetime.date(2011, 2, 6)
    >>> y.strftime('%Y-%m-%d.%f')
    '2011-02-06.000000'
    >>> x
    datetime.datetime(2011, 2, 6, 8, 2, 9, 465714)
    >>> str(x)
    '2011-02-06 08:02:09.465714'
    >>> x.microsecond
    465714
    >>> x.time()
    datetime.time(8, 2, 9, 465714)
    >>> x.time().microsecond/1000
    465.714   # milliseconds and microseconds.
    >>> int(x.time().microsecond / 1000)
    465  # milliseconds
    >>> s = '{:02d}:{:02d}:{:02d}.{:3d}'.format(r.hour, r.minute, r.second, int(r.microsecond / 1000), '2s')
    >>> s
    '08:02:09.465'
    

    【讨论】:

      【解决方案3】:

      什么是最 Pythonic 的方式取决于你说“时间戳”时想要什么。数字还是字符串?

      对于字符串,d.isoformat() 是最简单的。对于数字你做你:

      time.mktime(d.timetuple()) + d.microsecond/1000000.0
      

      这是假设 datetime 对象。当您说您想要来自 date 对象的毫秒精度时间戳时,我不确定您的意思。 date 对象甚至没有秒数,更不用说毫秒数了。 :-)

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-26
      • 2017-12-12
      • 2023-03-26
      • 2017-04-25
      • 2022-01-08
      相关资源
      最近更新 更多