这是什么日期时间格式,如何解析它?



>我有一些从 API 中提取的数据,日期格式如下:"1522454400000">

不知道如何解析它,但这就是我所拥有的(未成功尝试(

df = DataFrame(test)
df.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
df.set_index('Date')
df.index = pd.to_datetime(df.index, unit = 'd')

其中变量test是基础数据的列表。 这会错误地将数据解析为 1970 年。

解析结果:

1970-01-01 00:00:00.000000000

有什么想法吗?

**********************编辑************************************

蟒蛇版本:3

熊猫版本. 0.23.0

下面是再现性的工作示例。但首先,这是我发现的事实。

日期格式:自 1970 年 1 月 1 日起的 64 位 Unix 时间戳(以毫秒为单位

(时区:世界协调时

我的时区:UTC + 4(所需的日期时间索引(

代码:

import bitmex
import pandas as pd
from pandas import DataFrame
import datetime
import ccxt
api_connector = ccxt.bitmex({
'enableRateLimit': True
})
#get OHLCV Data
testdata = api_connector.fetch_ohlcv('XBTZ18', '1h')
df2 = DataFrame(testdata)
df2.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
#df2.set_index('Date')
df2.index = pd.to_datetime(df2.Date, unit='ms')
df3 = df2.drop(['Date'],
axis =1)
df3.tail()

这将返回:

Open    High    Low Close   Volume
Date                    
2018-07-06 00:00:00 6538.5  6555.0  6532.5  6537.0  176836
2018-07-06 01:00:00 6537.0  6535.5  6520.5  6524.5  139735
2018-07-06 02:00:00 6524.5  6542.5  6525.5  6542.5  59759
2018-07-06 03:00:00 6542.5  6545.0  6538.0  6538.0  121410
2018-07-06 04:00:00 6538.0  6538.5  6477.5  6525.0  764125

关闭!但没有雪茄。今天的日期是8/31/2018,所以我至少希望它在正确的月份。

伙计们,我做错了什么?

这几乎可以肯定是"Unix 时间"的变体:不是自 1970 年 1 月 1 日纪元以来的秒数,而是自 1970 年 1 月 1 日纪元以来的毫秒

>>> datetime.datetime.utcfromtimestamp(int('1522454400000') / 1000)
datetime.datetime(2018, 3, 31, 0, 0)

这当然是一个合理的日期。甚至看起来可能是UTC,而不是当地时间(除非你碰巧在英国,或者没想到它会在午夜(。


我不认为 Pandas 的任何内置格式(实际上只是datetime和/或dateutil格式的包装器(与此完全匹配,所以您可能需要做我所做的(转换为 int 并将其视为数字(或做字符串等价物(砍掉最后 3 个字符,然后视为 UNIX 时间戳的字符串(。

第一个似乎更简单:

>>> pd.to_datetime(int('1522454400000'), unit='ms')
Timestamp('2018-03-31 00:00:00')

事实上,它甚至可以直接在字符串上工作,隐式地进行转换:

>>> pd.to_datetime('1522454400000', unit='ms')
Timestamp('2018-03-31 00:00:00')

最新更新