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

时间:2018-08-24 20:17:27

标签: python pandas datetime datetime-format ccxt

我有一些要从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

有什么想法吗?

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

Python版本:3

熊猫版本。 0.23.0

这是可重复性的有效示例。但是首先,这是我发现的事实。

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

时区:UTC

我的时区: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,所以我至少希望它在正确的月份。

伙计们,我在做什么错?

1 个答案:

答案 0 :(得分:9)

几乎可以肯定,这是"Unix time"的一种变体:而不是自1970年1月1日以来的秒,而是自1970年1月1日以来的毫秒

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

那肯定是一个合理的日期。甚至看起来可能是UTC,而不是当地时间(除非您碰巧在英国,或者不希望它恰好在午夜)。


我认为Pandas的任何内置格式(实际上只是包装datetime和/或dateutil格式的包装纸)都与之完全匹配,因此您可能需要要么执行我的操作(转换为int并将其视为数字),要么进行等效的字符串处理(切掉最后三个字符,然后将其视为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')