Python:如何将ByBit返回的9位精度Timestamp转为datetime对象?
如何将ByBit的纳秒级时间戳
created_at_e9转换为DateTime对象 ByBit返回的created_at_e9是纳秒级时间戳(后缀e9代表单位是10^9,即纳秒),也就是从1970-01-01 UTC开始累计的纳秒数,共20位。转换的核心是将纳秒转换为对应编程语言DateTime类支持的时间单位(秒、毫秒或直接处理纳秒精度),以下是几种主流语言的实现方式:
Python:
Python的datetime模块支持秒级时间戳,可将纳秒戳除以1e9得到秒级浮点数,或拆分秒和微秒部分实现精确转换:import datetime # 示例纳秒时间戳 created_at_e9 = 1663315207126761200 # 方式1:直接转换(自动处理微秒) dt = datetime.datetime.fromtimestamp(created_at_e9 / 10**9, datetime.timezone.utc) print(dt) # 输出: 2022-09-16 00:00:07.126761+00:00 # 方式2:手动拆分秒和微秒,精度更可控 seconds = created_at_e9 // 10**9 microseconds = (created_at_e9 % 10**9) // 1000 # 纳秒转微秒 dt = datetime.datetime.fromtimestamp(seconds, datetime.timezone.utc).replace(microsecond=microseconds) print(dt)JavaScript:
JS的Date对象仅支持毫秒级精度,因此将纳秒戳除以1e6转换为毫秒:const created_at_e9 = 1663315207126761200; const dt = new Date(created_at_e9 / 1000000); // 纳秒 → 毫秒 console.log(dt.toISOString()); // 输出: 2022-09-16T00:00:07.127Z(JS会自动四舍五入微秒)Java:
Java的Instant类原生支持纳秒精度,可直接拆分秒和纳秒部分初始化:import java.time.Instant; import java.time.ZoneId; import java.time.format.DateTimeFormatter; public class TimestampConverter { public static void main(String[] args) { long created_at_e9 = 1663315207126761200L; // 拆分秒数和剩余纳秒数 long seconds = created_at_e9 / 1_000_000_000; long nanos = created_at_e9 % 1_000_000_000; Instant instant = Instant.ofEpochSecond(seconds, nanos); // 格式化为可读字符串 DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT.withZone(ZoneId.of("UTC")); System.out.println(formatter.format(instant)); // 输出: 2022-09-16T00:00:07.126761200Z } }
内容的提问来源于stack exchange,提问作者Volatil3
相关产品推荐
相关产品推荐

