将 unix 时间戳(长度 13)字符串转换为 Python 中的可读日期

Converting unix timestamp (length 13) string to readable date in Python

我正在尝试将此 unix 时间戳 1491613677888 转换为可读日期。 在这里 (Whosebug) 找到 python 脚本:

import datetime
print(
    datetime.datetime.fromtimestamp(
    int("1284101485")
    ).strftime('%Y-%m-%d %H:%M:%S')
)

但是当我把我的时间戳放在那里时,我得到了那个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument

现在我看到我使用的时间戳多了 3 个字符。 我检查了这个 link: http://www.unixtimestamp.com/index.php

并看到它从中抽出时间。 我如何使用 python 来做到这一点? (我正在使用 python 3.4)

您的时间戳多了 3 个字符并且是标准的 unix 时间戳?这意味着你的时间戳是从今天起至少 40,000 年后的未来。否则,最后 3 个字符可能代表其他内容,例如毫秒,但这并不能解释您看到的错误。

如果它们是毫秒,并且看到您没有在格式字符串中使用它们,我认为简单地剥离它们没有什么害处。

standard_unix_ts = int("1284101485000"[:-3])

编辑 考虑到@cdarke 的评论,我建议改为:

standard_unix_ts = int("1284101485000"[:10])

编辑 2 关注 Gils 评论

import datetime

not_unix_ts = "1284101485088"
unix_ts, milliseconds = not_unix_ts[:10], not_unix_ts[10:]
dt = datetime.datetime.fromtimestamp(float(unix_ts))
FORMAT_STRING = '%Y-%m-%d %H:%M:%S'
print("%s and %s milliseconds" % (dt.strftime(FORMAT_STRING), milliseconds))

您的 timestamp 不是 'classical' Unix 时间戳(自 1970 年 1 月 1 日以来的秒数),因为它以毫秒表示。

你可以这样翻译:

import datetime

timestamp_with_ms = 1491613677888

# We separate the 'ordinary' timestamp and the milliseconds
timestamp, ms = divmod(timestamp_with_ms, 1000)
#1491613677 888

# We create the datetime from the timestamp, we must add the 
# milliseconds separately
dt = datetime.datetime.fromtimestamp(timestamp) + datetime.timedelta(milliseconds=ms)


formatted_time = dt.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
# With Python 3.6, you could use:
# formatted_time = dt.isoformat(sep=' ', timespec='milliseconds')

print(formatted_time)
# 2017-04-08 03:07:57.888

编辑: 我没有注意到 fromtimestamp 接受浮点数。所以,我们可以简单地做:

import datetime
timestamp_with_ms = 1491613677888

dt = datetime.datetime.fromtimestamp(timestamp_with_ms / 1000)

formatted_time = dt.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
# With Python 3.6, you could use:
# formatted_time = dt.isoformat(sep=' ', timespec='milliseconds')

print(formatted_time)
# 2017-04-08 03:07:57.888