从Binance-API(Python)的时间戳中计算日期。

23

我从Binance-API收到了服务器时间,现在我尝试使用它,看起来是这样的:

{
  "serverTime": 1518440400000
}

问题是,我如何从这个时间戳计算出日期?

我尝试过

import datetime

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

但是日期无效。

你有想法,还是它太具体了?谢谢!


1
“1518440400000”是您收到的实际时间戳吗?如果是,那意味着服务器正在运行于公元50087年...但假设这只是一个例子,大多数编程语言都应该有一些函数可以解决这个问题。您使用的是哪种编程语言? - Addison
这是我得到的相同结果。我使用Python。 - cosmonaut
2
如果你发布了Binance API请求,那么这个问题会更有用。 - P i
3个回答

38

您可以使用这个:

from datetime import datetime
datetime.fromtimestamp(int("1518308894652"))

但是Python显示年份超出范围(考虑到它显示的是50087,这是可以理解的)。因此,我怀疑serverTime不是正常时间戳。

但是假设您收到的响应确实是时间戳,那么您无需进行任何其他转换,只需将字符串转换为整数即可。

编辑:

原来文档中写着:“所有与时间和时间戳相关的字段都以毫秒为单位。” 因此,只需将响应除以1000即可:datetime.fromtimestamp(int("1518308894652")/1000)来源


我尝试了,但是收到了“ValueError: year 50083 is out of range”的错误信息 :/ - cosmonaut
1
@cosmonaut 我已经编辑了问题并进行了修复。Binance API文档中给出的时间单位是毫秒,而Python期望的值是秒。 - Addison
@AidanGawronski,我不知道你是在指接受的答案被更改了,还是我的回答本身有问题。非常抱歉它被更改了,我并不是有意这样做的。我在研究问题时写了一个简短的答案,计划编辑我的答案以提供更多关于问题的信息,在那段时间里你发布了你的答案。但我完全是独立地找到了所有这些信息,我只是谷歌搜索了“Binance API”。 - Addison
好的,我相信你。 - AidanGawronski

18

当使用datetime.fromtimestamp时,你的响应时间是毫秒级别,但该函数需要秒数。

import datetime

print(datetime.datetime.fromtimestamp(1518308894652/1000))

# 2018-02-10 19:28:14.652000

3

通过指定毫秒作为单位,Pandas 可以完美地处理此问题。

import pandas as pd
pd.to_datetime(1518440400000, unit='ms')

时间戳('2018-02-12 13:00:00')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接