将 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
我正在尝试将此 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