为什么第 0 天是 1 月 0 日?

为什么第 0 天是 1 月 0 日?

如果我用 格式化一列mmm dd hh:mm:ss并将单元格的值设置为0,它将显示为Jan 00 00:00:00

这感觉与第 1 部分第 L.2.16.9.1 节相矛盾ECMA-376 标准,据称 Excel 也遵循了这一原则。

从规范来看:

可以解释为数值的日期是序列值。它由有符号整数日期部分和无符号小数时间部分组成。随着时间的推移,序列值的日期部分每天增加 1。序列值表示 UTC 日期和时间,因此没有时区信息。可以使用三种不同的基数将日期转换为序列值:

  • 在 1900 日期基准系统中,下限是 -9999 年 1 月 1 日 00:00:00,其序列值为 -4346018。上限是 9999 年 12 月 31 日 23:59:59,其序列值为 2,958,465.9999884。此日期基准系统的基准日期是 1899 年 12 月 30 日,其序列值为 0。
  • 在 1900 向后兼容日期基准系统中,下限为 1900 年 1 月 1 日 00:00:00,序列值为 1。上限为 9999 年 12 月 31 日 23:59:59,序列值为 2,958,465.9999884。此日期基准系统的基准日期为 1899 年 12 月 31 日,序列值为 0。
  • 在 1904 向后兼容日期基准系统中,下限为 1904 年 1 月 1 日 00:00:00,其序列值为 0。上限为 9999 年 12 月 31 日 23:59:59,其序列值为 2,957,003.9999884。此日期基准系统的基准日期为 1904 年 1 月 1 日,其序列值为 0。

由此,我推断0应该呈现为 1899 年 12 月 30 日、1899 年 12 月 31 日或 1904 年 1 月 1 日,具体取决于选择上述哪个系统(Excel 在此处提供了一些可定制性)。我是否遗漏了某些内容,或者有人能解释为什么它偏离了规范?

如果这很重要的话,我使用的是 16.61.1 版本。

答案1

这似乎与 ECMA-376 标准第 1 部分第 L.2.16.9.1 节相矛盾

在 1900 向后兼容日期基准系统中,下限为 1900 年 1 月 1 日 00:00:00,其序列值为 1

不,它与这部分并不矛盾。下限是序列值 1;序列值 0 超出限制,不应使用,并且您不能期望使用它得到正确的结果。

我可以找到这个部分日期函数的文档

Excel 根据计算机使用的日期系统解释年份参数。默认情况下,Windows 版 Microsoft Excel 使用 1900 日期系统,这意味着第一个日期是 1900 年 1 月 1 日。

相关内容