【问题标题】:Converting a java System.currentTimeMillis() to date in python在 python 中将 java System.currentTimeMillis() 转换为日期
【发布时间】:2010-10-25 02:44:48
【问题描述】:

我有从 1970 年开始的以毫秒为单位的时间戳。我想将其转换为 Python 中人类可读的日期。如果涉及到这一点,我可能不会失去一些精确度。

我该怎么做?

以下给出 ValueError: timestamp out of range for platform time_t on Linux 32bit

#!/usr/bin/env python
from datetime import date
print date.fromtimestamp(1241711346274)

谢谢你, 马克西姆。

【问题讨论】:

    标签: java python date formatting timestamp


    【解决方案1】:

    您可以保留精度,因为在 Python 中时间戳是浮点数。这是一个例子:

    import datetime
    
    java_timestamp = 1241959948938
    seconds = java_timestamp / 1000
    sub_seconds  = (java_timestamp % 1000.0) / 1000.0
    date = datetime.datetime.fromtimestamp(seconds + sub_seconds)
    

    你显然可以让它比这更紧凑,但上面的内容适合在 REPL 中一次一行地输入,所以看看它做了什么。例如:

    Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
    [GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> java_timestamp = 1241959948938
    >>> import datetime
    >>> seconds = java_timestamp / 1000
    >>> seconds
    1241959948L
    >>> sub_seconds  = (java_timestamp % 1000.0) / 1000.0
    >>> sub_seconds
    0.93799999999999994
    >>> date = datetime.datetime.fromtimestamp(seconds + sub_seconds)
    >>> date
    datetime.datetime(2009, 5, 10, 8, 52, 28, 938000)
    >>> 
    

    【讨论】:

      【解决方案2】:

      Python 需要秒,所以先除以 1000.0:

      >>> print date.fromtimestamp(1241711346274/1000.0)
      2009-05-07
      

      【讨论】:

      • 可能需要除以 1000.0 以强制在旧版本的 Python 中使用浮点数。
      【解决方案3】:

      时间戳除以 1000 以毫秒为单位。

      date.fromtimestamp(1241711346274/1000)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多