You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将API返回的TICK_MASK与_Datetime_nano_hundred_ticks转为Python Datetime?

解决方案:转换C#风格的带掩码Tick时间到Python UTC时间

首先,你的两个字段符合C#生态中带掩码的Tick时间特征:

  • _Datetime_nano_hundred_ticks:单位为100纳秒(和C# DateTime.Ticks定义一致,1 Tick = 100ns),但高位可能包含非时间信息
  • TICK_MASK:位掩码(此处为2^62 - 1),用于提取_Datetime_nano_hundred_ticks中的有效时间位

转换步骤

  1. 提取有效Tick值:通过位与运算过滤掉非时间的高位信息
  2. 转换为Python UTC时间:基于C# Tick的起始基准(格里高利历0001-01-01 00:00:00)与Unix时间戳的差值进行转换

Python代码实现

import datetime

# 输入字段
TICK_MASK = 4611686018427387903
_Datetime_nano_hundred_ticks = 5249825230441140085

# 1. 提取有效Tick值
masked_ticks = _Datetime_nano_hundred_ticks & TICK_MASK

# 2. 转换参数:C# Tick起始点到Unix纪元的秒数,1秒=10^7个Tick
C_EPOCH_TO_UNIX_EPOCH = 62135596800
TICKS_PER_SECOND = 10**7

# 计算Unix时间戳(含微秒级精度)
total_seconds = masked_ticks / TICKS_PER_SECOND
unix_timestamp = total_seconds - C_EPOCH_TO_UNIX_EPOCH

# 转换为UTC datetime对象(保留高粒度时间)
utc_datetime = datetime.datetime.fromtimestamp(unix_timestamp, datetime.timezone.utc)

print(utc_datetime)
# 输出:2023-03-09 01:13:21.375218+00:00

为什么你的原始代码出错?

  • 未使用掩码过滤:原始_Datetime_nano_hundred_ticks包含高位无效数据,直接转换会得到错误的时间值
  • 纪元基准差异:C# DateTime.Ticks的起始点是格里高利历的0001-01-01,而Python datetime(1,1,1)默认使用儒略历,两者日期计算规则不同,导致结果偏差

内容的提问来源于stack exchange,提问作者user1234440

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:08:14