Expand description
零依赖时间面:纪元纳秒 ↔ civil(年月日时分秒)双向换算。
Python 版 TickData.datetime 等字段用本地 naive datetime;
Rust 版统一为 UTC 纪元纳秒(DtNs),本地化/展示层由使用方处理
(DESIGN.md 决定 8-A)。换算采用 Howard Hinnant 的 civil_from_days /
days_from_civil 算法(公历 1582-10-15 起全域正确),均以单测钉死。
§可表达范围(重要)
DtNs = i64 纳秒 → 覆盖 1677-09-21T00:12:43.145224192Z ..
2262-04-11T23:47:16.854775807Z(DTNS_MIN/DTNS_MAX)。
超出范围时try_civil_to_nanos 返回 None,civil_to_nanos panic
(对齐 Python datetime 超范围抛 ValueError 的失败面);
远日期(如股票 IPO 日 1990 前 / 交易所属历史日期)请用 Day 序数表达。
Structs§
- Civil
- civil 六元组 + 毫微段(一日内)。
Constants§
- DTNS_
MAX DtNs可表达的 civil 上界:2262-04-11T23:47:16.854775807Z。- DTNS_
MIN DtNs可表达的 civil 下界近似:1677-09-21T00:12:43.145224192Z (即i64::MIN纳秒;换算取整到纳秒需 +1 才落在合法 civil 上)。- NANOS_
PER_ DAY - 一天的纳秒数(86400 s,不涉闰秒)。
- NANOS_
PER_ SEC - 一秒的纳秒数。
Functions§
- civil_
from_ days - 纪元日序数 → civil (年, 月, 日)(Hinnant civil_from_days)。
- civil_
from_ nanos - 纪元纳秒 → civil(UTC 视角;除法对负纳秒采用 floor 保证越日正确)。
- civil_
to_ nanos - civil → 纪元纳秒(以 civil 视作 UTC,无时区移位)。
- days_
from_ civil - civil 纪元日天数 → 纪元日序数(Hinnant days_from_civil)。
- days_
in_ month - 某年某月的天数(月越界返回 0)。
- format_
civil yyyy-mm-dd hh:mm:ss(.fffffffff 有 nanos 才显示)文本(UTC 视角)。- from_
system_ time SystemTime→ 纪元纳秒(epoch 之前取负;独立函数,避免为基本类型i64实现外部 trait——orphan 规则)。- is_
leap_ year - 闰年判定(公历规则)。
- is_
valid_ civil - civil 合法性(月 1-12、日不超当月天数、时分秒纳秒在域内)。
- now_
nanos - 当前时刻的纪元纳秒(SystemTime 视角)。
- parse_
civil - 解析
"YYYY-MM-DD[ HH:MM[:SS[.fffffffff]]]"(亦接受T分隔与纯日期)。 - trading_
day - 纪元纳秒所在交易日序数(向下取整,负纳秒同样正确)。
- try_
civil_ to_ nanos - civil → 纪元纳秒的可失败版本;严格校验日历合法性(含闰年 2 月)与 i64 范围。