C#返回的DateTime.MinValue在JavaScript转换后时间异常问题
日期转换偏差原因说明
核心原因有两个:
- 时区偏移产生8小时差值
C#返回的时间戳
-62135596800000对应的是UTC标准时间的0001-01-01 00:00:00,JavaScript的Date对象默认按运行环境的本地时区输出时间。如果运行环境处于东八区(UTC+8),会自动在UTC时间基础上叠加8小时的时区偏移,得到0001-01-01 08:00:00的基础值。
- 历法规则差异产生5分43秒差值
C#的
DateTime类型计算公元1582年之前的时间采用儒略历规则,而JavaScript的Date对象对1582年格里高利历改革之前的时间,默认采用格里高利历逆行推演的规则,两种历法在公元1年的时间计算上存在约5分43秒的固定偏差,叠加前面的时区偏移后,最终得到你观察到的0001-01-01 08:05:43结果。
可选修复方案
- 前端输出时统一使用UTC时间,规避时区差异:
// 按UTC格式输出日期,即可得到预期的 0001-01-01 00:00:00 const utcDate = `${d.getUTCFullYear()}-${String(d.getUTCMonth() + 1).padStart(2, '0')}-${String(d.getUTCDate()).padStart(2, '0')} ${String(d.getUTCHours()).padStart(2, '0')}:${String(d.getUTCMinutes()).padStart(2, '0')}:${String(d.getUTCSeconds()).padStart(2, '0')}` console.log(utcDate)
- 服务端修改序列化规则,直接返回ISO 8601格式的UTC时间字符串,同时明确标记
DateTime字段的Kind属性为Utc,避免两端序列化/反序列化的规则差异。
内容的提问来源于stack exchange,提问作者Robin Sun
相关产品推荐
相关产品推荐

