将unix时间戳(长度为13)字符串转换为Python

时间:2017-04-10 08:35:50

标签: python unix unix-timestamp

我想将此unix时间戳1491613677888转换为可读日期。 在这里找到(stackoverflow)那个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个字符更长。 我在这个链接上查了一下: http://www.unixtimestamp.com/index.php

并且看到了它的时间。 我怎么能用python做到这一点? (我正在使用python 3.4)

3 个答案:

答案 0 :(得分:2)

您的时间戳是3个字符更长并且是标准的unix时间戳?这意味着从今天开始,您的时间戳将至少为未来4万年。否则,最后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))

答案 1 :(得分:2)

您的timestamp不是经典的&#39; 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

答案 2 :(得分:-1)

试试这个 -

$ date -d @1284101485
Fri Sep 10 01:51:25 CDT 2010

$ date -d @1284101485 '+%Y-%m-%d %H:%M:%S'
2010-09-10 01:51:25