Skip to main content
 首页 » 编程设计

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

2025年05月04日10lvdongjie

我有一些数据是从 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() 

返回:

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 日纪元以来的毫秒:

>>> 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')