这是什么日期时间格式,我该如何解析它?
What datetime format is this and how do I parse it?
我有一些数据是从 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
Pandas 版本。 0.23.0
这是一个再现性的工作示例。但首先,这是我发现的事实。
日期格式:64 位 Unix 时间戳,自 1970 年 1 月 1 日以来的毫秒数
时区: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()
这个returns:
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
关闭!但没有雪茄。今天的日期是 2018 年 8 月 31 日,所以我至少希望它在正确的月份。
伙计们,我做错了什么?
这几乎可以肯定是 "Unix time" 的变体:自 1970 年 1 月 1 日纪元以来的秒数,而不是自 1970 年 1 月 1 日纪元以来的秒数,而是自 1970 年 1 月 1 日纪元以来的 毫秒:
>>> datetime.datetime.utcfromtimestamp(int('1522454400000') / 1000)
datetime.datetime(2018, 3, 31, 0, 0)
这看起来确实是一个合理的约会。它甚至看起来可能是 UTC,而不是当地时间(除非你碰巧在英国,或者没想到它恰好是午夜)。
我认为 Pandas' 中的任何内置格式(实际上只是对 datetime
and/or 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')
我有一些数据是从 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
Pandas 版本。 0.23.0
这是一个再现性的工作示例。但首先,这是我发现的事实。
日期格式:64 位 Unix 时间戳,自 1970 年 1 月 1 日以来的毫秒数
时区: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()
这个returns:
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
关闭!但没有雪茄。今天的日期是 2018 年 8 月 31 日,所以我至少希望它在正确的月份。
伙计们,我做错了什么?
这几乎可以肯定是 "Unix time" 的变体:自 1970 年 1 月 1 日纪元以来的秒数,而不是自 1970 年 1 月 1 日纪元以来的秒数,而是自 1970 年 1 月 1 日纪元以来的 毫秒:
>>> datetime.datetime.utcfromtimestamp(int('1522454400000') / 1000)
datetime.datetime(2018, 3, 31, 0, 0)
这看起来确实是一个合理的约会。它甚至看起来可能是 UTC,而不是当地时间(除非你碰巧在英国,或者没想到它恰好是午夜)。
我认为 Pandas' 中的任何内置格式(实际上只是对 datetime
and/or 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')