Unix纪元时间的序列化格式、规范及转换工具问询
Unix纪元时间的序列化变体、规范与转换工具
其他已知的序列化格式
除了你提到的三种基础格式,还有这些常见变体:
- 微秒级整数:
1707882022159835(直接将带微秒的秒值转为整数,省去小数点) - 纳秒级整数:
1707882022159835000(部分语言和系统支持,比如Go的time.UnixNano()返回的就是这种格式) - 带单位标识的字符串:比如
"1707882022s"、"1707882022000ms",明确标注时间精度单位 - 字符串形式的浮点纪元时间:比如
"1707882022.159835",把数值转为字符串存储,避免精度丢失
格式规范:事实标准而非强制统一
不存在全球强制的通用规范,但有一些被广泛接受的事实标准:
- 早期Unix系统时间以秒为单位,这是纪元时间的最初基础
- 随着硬件计时精度提升,各语言和库根据自身应用场景选择精度:前端JS普遍用毫秒级(因为
Date对象的getTime()返回毫秒),后端语言如Python支持秒/微秒,Go则原生支持纳秒级操作 - 部分行业协议会有特定约定,但纪元时间的序列化更多是语言设计者或开发团队根据需求做出的决策,没有统一强制标准,不过秒级、毫秒级整数是目前最通用的两种格式
便捷转换工具
命令行工具
- Linux/macOS自带的
date命令:- 秒级转可读时间:
date -r 1707882022 - 自定义输出格式:
date -j -f "%s" 1707882022 +"%Y-%m-%d %H:%M:%S" - 毫秒级转可读时间:先除以1000再转换,
date -r $((1707882022000/1000))
- 秒级转可读时间:
- GNU
gdate(macOS需通过brew安装):支持直接解析带小数的秒值,比如gdate -d @1707882022.159835
编程语言内置工具
- Python:用
datetime.fromtimestamp()处理秒级或带小数的秒值;毫秒级需先转成秒:datetime.fromtimestamp(1707882022000/1000) - JavaScript:
new Date(1707882022000)直接解析毫秒级数值,秒级需乘1000:new Date(1707882022 * 1000) - Go:
time.Unix(1707882022, 159835000)通过秒+纳秒参数组合微秒精度,或用time.UnixMilli(1707882022000)直接解析毫秒级整数
内容的提问来源于stack exchange,提问作者XML
相关产品推荐
相关产品推荐

