一句话回答: AlphaFeed 的 K 线每根带三个时间字段:timestamp(毫秒级 Unix 时间戳,int64)、trade_date(交易日字符串 YYYY-MM-DD)、trade_time(含时分秒的字符串,分钟线到具体时刻、日线为 00:00:00)。做画图/排序用 timestamp,做按日聚合用 trade_date,看具体时刻用 trade_time——本文讲清单位、时区与互转。
时间字段最容易踩坑:把毫秒当成秒去 to_datetime 会得到 1970 年附近的错误时间;不知道 trade_date 与 trade_time 的分工,聚合按日时用错列;分钟线还要确认时区是不是北京时间。搞清三个字段的语义,时间处理就不会出错。
from alphafeed import AlphaFeed
import pandas as pd
af = AlphaFeed() # 读取 ALPHAFEED_API_KEY
df = af.klines.get("600519.SH", period="1d", count=3, to_dataframe=True)
print(df[["timestamp", "trade_date", "trade_time"]].to_string(index=False))
# timestamp trade_date trade_time
# 1789920000000 2026-09-21 2026-09-21 00:00:00
# ...
print({c: str(df[c].dtype) for c in ["timestamp", "trade_date", "trade_time"]})
# {'timestamp': 'int64', 'trade_date': 'str', 'trade_time': 'str'}三个字段的分工:
字段 | 类型 | 含义 | 用途 |
|---|---|---|---|
| int64 | 毫秒级 Unix 时间戳 | 排序、画图 x 轴、跨源对齐 |
| str | 交易日 | 按日聚合、按日期筛选 |
| str | 具体时刻(日线为 | 分钟线看具体分钟 |
unit="ms" 解析# 正确:毫秒要指定 unit="ms"
df["dt"] = pd.to_datetime(df["timestamp"], unit="ms")
print(df[["timestamp", "dt"]].tail(2).to_string(index=False))
# 错误示范:当成秒会得到 1970 年
wrong = pd.to_datetime(df["timestamp"].iloc[0], unit="s")
print("按秒解析(错误):", wrong) # 1970-xx-xx,明显不对m = af.klines.get("600519.SH", period="5m", count=3, to_dataframe=True)
print(m[["timestamp", "trade_time"]].to_string(index=False))
# 末根 trade_time 通常是 15:00:00(A股收盘),对应北京时间
# timestamp 转 UTC 再转北京时间,与 trade_time 对齐核对
utc = pd.to_datetime(m["timestamp"], unit="ms", utc=True)
bj = utc.dt.tz_convert("Asia/Shanghai")
print("北京时间:", bj.dt.strftime("%Y-%m-%d %H:%M:%S").tolist())
trade_time是北京时间的可读时刻;timestamp是 UTC 毫秒。用unit="ms", utc=True再tz_convert("Asia/Shanghai")即可与trade_time对齐核对,避免时区错位。
# 1) 设为 DatetimeIndex 便于重采样/切片
df["dt"] = pd.to_datetime(df["timestamp"], unit="ms")
kline = df.set_index("dt")
# 2) 按 trade_date 字符串直接筛区间(最省事)
sub = df[(df["trade_date"] >= "2026-09-01") & (df["trade_date"] <= "2026-09-30")]
# 3) 需要 date 对象时再转
df["date"] = pd.to_datetime(df["trade_date"]).dt.datepd.to_datetime(ts, unit="ms");用 unit="s" 会得到 1970 年错误值。trade_date(纯日期);看分钟时刻用 trade_time;日线的 trade_time 是 00:00:00,别用它区分分钟。trade_time 是北京时间可读串,timestamp 是 UTC 毫秒;跨时区对齐用 utc=True 再 tz_convert("Asia/Shanghai")。YYYY-MM-DD 字符串按字典序等价于按日期序,直接比较区间很方便,不必都转 datetime。timestamp 比字符串更可靠。trade_time 对应其本地/交易所时间,跨市场对齐优先用 timestamp。Q:timestamp 到底是秒还是毫秒?
A:毫秒(13 位整数)。解析必须 unit="ms"。
Q:为什么我 to_datetime 出来是 1970 年?
A:把毫秒当成了秒。改成 unit="ms" 即可。
Q:分钟线时间是北京时间吗?
A:trade_time 是北京时间的可读时刻(A 股收盘显示 15:00:00);timestamp 是 UTC 毫秒,转换时用 tz_convert("Asia/Shanghai") 对齐。
Q:按日期筛选一定要转 datetime 吗?
A:不用。trade_date 是 YYYY-MM-DD 字符串,按字典序比较就等于按日期比较,直接 >=/<= 即可。
Q:需要付费吗?
A:K 线取数有免费额度;批量与全市场取数需 Starter 及以上。时间字段解析是本地处理,不涉及付费。详见定价页。
AlphaFeed K 线的三个时间字段各有分工:timestamp(毫秒 Unix,排序/画图)、trade_date(日期字符串,按日聚合/筛选)、trade_time(可读时刻,看分钟)。记住「timestamp 是毫秒、trade_time 是北京时间」两条,用 unit="ms" 与 tz_convert 正确解析,时间处理就不会出错。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。