Jer*_*ers 28 date microsoft-excel
这个问题是基于AdamV在他关于How do I get the day name into a cell in Excel in Excel 的回答中的观察结果?
当 A1 的值为 2009-08-01 时,则:
=WEEKDAY(A1)
将获得 7
=TEXT(7, "dddd")
将获得 Saturday
=TEXT(7,"dddd, yyyy-mm-dd")
将获得 Saturday, 1900-01-07
=TEXT(1,"dddd, yyyy-mm-dd")
将获得 Sunday, 1900-01-01
=TEXT("1900-01-01","dddd, yyyy-mm-dd")
还将获得 Sunday, 1900-01-01
最后两个是错误的:1900 年 1 月 1 日实际上是星期一。
各种消息来源似乎证实:
我错过了什么?为什么 Excel 这样做是错误的?
use*_*686 42
如 Microsoft KB 214058 中所述:
1900 年 3 月 1 日之前的星期几在 Excel 中不正确
更多信息
最初创建 Microsoft Excel 中的日期系统时,它被设计为与其他电子表格程序使用的日期系统完全兼容。
但是,在此日期系统中,1900 年被错误地解释为闰年。由于 1900 年没有 2 月 29 日(“闰日”),因此无法正确计算 1900 年 3 月 1 日(“闰日”之后的一天)之前的任何日期的星期几。
“其他电子表格程序”指的是当时非常流行的Lotus 1-2-3,并错误地认为 1900 年是闰年。这在KB 214326 中有更详细的解释:
Excel 2000 错误地假定 1900 年是闰年
更多信息
当 Lotus 1-2-3 首次发布时,该程序假定 1900 年是闰年,尽管它实际上不是闰年。这使得程序更容易处理闰年,并且不会对 Lotus 1-2-3 中的几乎所有日期计算造成损害。
当 Microsoft Multiplan 和 Microsoft Excel 发布时,他们还假设 1900 年是闰年。这种假设允许 Microsoft Multiplan 和 Microsoft Excel 使用与 Lotus 1-2-3 相同的序列日期系统,并提供与 Lotus 1-2-3 的更大兼容性。将 1900 年视为闰年也使用户更容易将工作表从一个程序移动到另一个程序。
尽管在技术上可以更正此行为,以便当前版本的 Microsoft Excel 不会假定 1900 年是闰年,但这样做的弊大于利。
如果要纠正这种行为,则会出现许多问题,包括:
- 当前 Microsoft Excel 工作表和其他文档中的几乎所有日期都将减少一天。纠正这种转变需要花费大量的时间和精力,尤其是在使用日期的公式中。
- 某些函数,例如 WEEKDAY 函数,会返回不同的值;这可能会导致工作表中的公式无法正常工作。
- 更正此行为会破坏 Microsoft Excel 和其他使用日期的程序之间的串行日期兼容性。
如果该行为仍未得到纠正,则只会出现一个问题:
- WEEKDAY 函数为 1900 年 3 月 1 日之前的日期返回不正确的值。因为大多数用户不使用 1900 年 3 月 1 日之前的日期,所以此问题很少见。
Gio*_*rgi 13
这是乔尔本人解释的原因:我的第一次 BillG 评论
Basic 使用 1899 年 12 月 31 日而不是 1900 年 1 月 1 日作为纪元,但由于某种原因,今天的日期在 Excel 中与在 Basic 中相同。
嗯?
我去找了一位年纪大到能记住原因的 Excel 开发人员。Ed Fries 似乎知道答案。
“哦,”他告诉我。“看看 1900 年 2 月 28 日。”
“是59,”我说。
“现在试试 3 月 1 日。”
“是61!”
“60怎么了?” 埃德问道。
“2 月 29 日。1900 年是闰年!它可以被 4 整除!”
“很好的猜测,但没有雪茄,”埃德说,让我想了一会儿。
哎呀。我做了一些研究。能被 100 整除的年份不是闰年,除非它们也能被 400 整除。
1900年不是闰年。
“这是 Excel 中的一个错误!” 我惊呼道。
“嗯,不是真的,”埃德说。“我们必须这样做,因为我们需要能够导入 Lotus 123 工作表。”
“所以,这是Lotus 123中的一个错误?”
“是的,但可能是故意的。Lotus 必须适合 640K。这不是很多内存。如果您忽略 1900,您可以通过查看最右边的两位是否为闰年来确定给定年份是否为闰年是零。那真的是又快又容易。莲花的家伙们可能认为过去那两个月的方式错了没有关系。