将ms中的13位unixtime转换为python中的时间戳

时间:2018-04-07 19:05:14

标签: python-3.x datetime

我想将13位Unix时间(以毫秒为单位)转换为时间戳:

“1523126888080” ==>> %Y-%m-%d%H:%M:%S

我已尝试过以下link的代码,但我认为这是针对10位Unix时间而且我有13位Unix时间。所以,

此代码正常运行,但它给出了错误的结果和错误的时间:

import time
time.strftime("%D %H:%M", time.localtime(int("1523126888080".strip()[0:9])))

Output: '1974-10-30 02:34:48'
Expected: '2018-04-08 12:18:08'

但是这个是错误的:

import time
time.strftime("%D %H:%M", time.localtime(int("1523126888080")))

Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
time.strftime("%D %H:%M", time.localtime(int("1523126888080")))
OSError: [Errno 22] Invalid argument

2 个答案:

答案 0 :(得分:1)

您有一个毫秒级的精确时间戳,因此首先将其除以1000,然后将其提供给datetime.datetime.fromtimestamp()以获取当地时区(或传递目标时区的datetime.tzinfo作为第二个参数)或UTC的datetime.datetime.utcfromtimestamp()。最后,使用datetime.datetime.strftime()将其转换为所需格式的字符串。

import datetime

timestamp = "1523126888080"
your_dt = datetime.datetime.fromtimestamp(int(timestamp)/1000)  # using the local timezone
print(your_dt.strftime("%Y-%m-%d %H:%M:%S"))  # 2018-04-07 20:48:08, YMMV

答案 1 :(得分:0)

尝试将1523126888080除以1000以获得有效的时间戳 您还应该使用%d而不是%D作为strftime的参数,即:

import time
ts = 1523126888080 / 1000
print(time.strftime("%d %H:%M", time.localtime(ts)))
# 29 21:04