日期与时间

.NET Ticks 转换保留最后一个时钟周期

输入 DateTime.Ticks 或含秒的日期,每行一条;先确认 UTC 或无时区语义,再核对转换结果。

.NET Ticks 转换

输入

输入仅在当前浏览器中处理,不会发送到服务器。

结果

选项

仅解释 DateTime.Ticks;起点为 0001-01-01;每 tick 为 100 纳秒。

每行输入非负十进制整数,或 YYYY-MM-DDTHH:mm:ss,可带 1–7 位小数秒。UTC 模式接受 Z、±HH:mm;省略后缀按 UTC。无时区模式不得带后缀。

无法从整数恢复 Kind。无时区模式仅保留日历字段,不输出 Unix 时间戳;Local 值还需要来源时区,工具不会推断。

日期保留七位小数秒。Unix 整数秒和毫秒向下取整,余数以 tick 为单位单独展示。

最多 1000 个物理行和 100000 个 UTF-16 代码单元。空行会报告错误。

输入内容或载入示例以开始。

.NET Ticks 转换适合排查 C# 日志里的长整数。只显示毫秒的日期查看器可能把不同记录显示成同一时刻;保留七位小数秒,才能看见最后几个 tick 的差别。

先确认字段来自 DateTime.Ticks。整数本身不携带 Kind,数据库版本号、开机计时和文件时间即使长度相近,也不能套用同一套起点与单位。

为什么使用 .NET Ticks 转换

末位数字参与往返

在 UTC 模式下,.NET Ticks 转换会把 621355968000000001 显示成 1970-01-01T00:00:00.0000001Z。反向使用完整日期,小于一毫秒的那一 tick 也能回到原整数。

细分刻度与放大的单个刻度,经双向路径连接日历和时钟。

未知时区保持未知

无时区值只说明钟面日期,不代表已经确定的瞬间。结果没有 Z,也没有 Unix 字段,避免给缺少来源信息的记录强行套上一个看似合理的时区。

同一计数连接两个读数相同的时钟,只有其中一条分支连到地球和时间线。

先确认来源,再解释时间

01

区分 Ticks 与 UtcTicks

确认保存的是 UTC 的 DateTime.Ticks 或 UtcTicks 后再选 UTC。DateTimeOffset.Ticks 只含钟面时间,缺少 Offset 时先用无时区查看;已知偏移可在日期转 Ticks 时补入。

02

用示例检查一 tick

示例包含最小日期、Unix 纪元后一 tick 和最大日期。预览后点击应用,即可检查七位小数。需要回到原数据时,撤销会同时恢复输入和结果。

03

切换刷新方式

自动转换在停止输入约 350 毫秒后执行,关闭后可用按钮或 Ctrl/Cmd + Enter。只有全部行成功且结果未过期时才能反向回填;改方向或语义会立即禁用旧报告导出。

精确转换与逐行核对

双向保留整数精度

Ticks 转日期和日期转 Ticks 均使用整数运算,不先经过浮点数或毫秒 Date。导出的长整数为 JSON 字符串,防止后续解析器改变末尾数字。

显式偏移先归一化

UTC 模式中的 +08:00 日期先换算成 UTC 再计数,不把本机所在时区掺入计算。无后缀日期则按所选语义解释,同一批次采用相同规则。

展示毫秒之外的余数

Ticks 毫秒换算中,10,000 个 tick 才是一毫秒。报告同时保留 Unix 整数秒、整数毫秒及各自余数,纪元前一 tick 不会被误显示为零。

错误不会吞掉其他行

每条结果保留原输入和物理行号,合法行与错误行并存。首次只显示 50 行,每次可再展开 50 行;复制和下载始终包含所有行及错误原因。

起点、时区和精度的边界

只采用一种纪元
本页固定使用公历 0001-01-01 起点和 100 纳秒单位,不按位数猜测。FILETIME、WebKit、Excel 序列日期、TimeSpan、Stopwatch、Environment.TickCount、rowversion 与 DateTime.ToBinary 都不属于此输入语义。
明确的数值范围
允许 0 到 3155378975999999999,日期年限为 0001–9999。带偏移输入在归一化为 UTC 后也必须满足范围;即使输入的钟面日期有效,跨越边界仍会报错。
严格解析日期
格式为 YYYY-MM-DDTHH:mm:ss,T 可换成一个空格,可带 1–7 位小数秒以及 Z 或 ±HH:mm。拒绝闰秒、24:00、无效日期、仅日期、缺秒和超细小数;不悄悄进位、截断或去掉空白。
不恢复来源时区
UTC 偏移最大为 ±14:00,拒绝表示未知的 -00:00。无时区模式拒绝所有后缀,包括 Z。切换语义只是重新解释字段,不是地区时区转换,也不会恢复 Kind 或处理夏令时。
批次整体有上限
最多 1,000 个物理行和 100,000 个 UTF-16 代码单元;末尾换行产生的空行同样报错。超限时拒绝整批,不静默截取。文件导入、URL 取数、日期运算与实时钟不在本页范围内。
反向必须使用完整结果
反向回填不用舍入后的 Unix 毫秒,也不跳过错误行。示例、清空和反向均先展示替换文本及数量,应用后可撤销一次,恢复输入、选项和输出。

.NET Ticks 转换常见问题

怎样把 ticks 转成日期?

选择 Ticks → 日期,并明确时间语义后输入整数。C# 的 new DateTime(ticks) 可恢复日历字段,Kind 默认为 Unspecified;如果来源确定是 UTC,可使用带 DateTimeKind.Utc 的构造函数。

为什么 DateTime.Ticks 会受时区影响?

Ticks 反映 DateTime 的钟面字段,Kind 说明这些字段如何解释。因此 DateTime.Now 与 ToUniversalTime() 可以指向同一瞬间,却具有不同的 tick 数。只保存 Ticks 不会同时保存 Kind。

怎样从 ticks 得到毫秒?

一毫秒等于 10,000 个 tick。直接除以 10,000 得到的是从公元一年起的毫秒数;若要 Unix 毫秒且来源为 UTC,先减去 621355968000000000 再相除。需要保留小数部分时,还要查看余数。

把 DateTime.Now.Ticks 放进 int 会丢失精度吗?

现代日期的 tick 数超出 32 位 int 范围,应在 .NET 中使用 64 位 long。经过把 JSON 数字解析为浮点数的系统时,建议以字符串传递。相对某个基准存差值,只适用于事先明确限制过的范围。

为什么 DateTime 使用 ticks 而不是毫秒?

Tick 表示 100 纳秒的增量,可以在 64 位值中覆盖支持的日期范围。表示精度比毫秒细,并不意味着系统时钟每隔 100 纳秒就能提供一个真正的新测量值。

结果与预期不同?

核对日志里的原始值

用 .NET Ticks 转换核对已知日期与原始整数,再把完整报告和所选语义一起保留,便于复查数据来源。