本文介绍了为什么 1899-12-30 是 Access/SQL Server 中的零日期而不是 12/31?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

出于好奇而不是任何真正的问题;今天出现了这个问题,我知道我已经看到 1899-12-30 在 Access 和较旧的 SQL Server 应用程序中用作默认"日期和零日期.只是想知道为什么 - 这是从哪里来的,为什么不使用 1899-12-31?

More out of curiosity than any real problem; the question came up today and I know I've seen 1899-12-30 used as a "default" date and a zero date in Access and older SQL Server apps. Just wondered why - where did that come from, and why isn't 1899-12-31 used then?

推荐答案

在当时保持与 Lotus 1-2-3 的兼容性,它有一个错误,它认为 1900 年是闰年(或假装?).

Maintaining compatibility with Lotus 1-2-3 back in the day, which had a bug in that it thought the year 1900 was a leap year (or pretended?).

解释太长无法引用,但为了好奇,这里有一些片段.

The explanation is too long to quote, but for the sake of curiosity, here are some snippets.

http://www.joelonsoftware.com/items/2006/06/16.html

1900 年不是闰年.

这是 Excel 中的一个错误!";我惊呼.

"It's a bug in Excel!" I exclaimed.

好吧,不是真的,"埃德说.我们必须这样做,因为我们需要能够导入 Lotus 123 工作表."

"Well, not really," said Ed. "We had to do it that way because we need to be able to import Lotus 123 worksheets."

那么,这是 Lotus 123 中的一个错误?"

"So, it's a bug in Lotus 123?"

"是的,但可能是故意的.Lotus 必须适合 640K.那不是很多内存.如果忽略 1900,您可以通过查看最右边的两位是否为零来确定给定年份是否为闰年.这真是又快又容易.在过去的两个月里,Lotus 的家伙们可能认为错了并不重要.看起来 Basic 的家伙们想对那两个月进行分析,所以有一天他们将时代移回了过去."

"Yeah, but probably an intentional one. Lotus had to fit in 640K. That's not a lot of memory. If you ignore 1900, you can figure out if a given year is a leap year just by looking to see if the rightmost two bits are zero. That's really fast and easy. The Lotus guys probably figured it didn't matter to be wrong for those two months way in the past. It looks like the Basic guys wanted to be anal about those two months, so they moved the epoch one day back."

  • http://www.cpearson.com/excel/datetime.htm
  • 实际上,这个数字比实际天数多一.这是因为 Excel 的行为就像日期 1900-Feb-29 存在一样.它没有.1900年不是闰年(2000年是闰年).在 Excel 中,1900 年 2 月 28 日之后的第二天是 1900 年 2 月 29 日.实际上,1900 年 2 月 28 日之后的第二天是 1900 年 3 月 1 日.这不是错误".确实,这是设计使然.Excel 以这种方式工作,因为它确实是 Lotus 123 中的一个错误.当 Excel 被引入时,123 几乎占据了整个电子表格软件市场.微软决定继续Lotus的bug,以便完全兼容.从 123 切换到 Excel 的用户不必对其数据进行任何更改.只要您的所有日期都晚于 1900 年 3 月 1 日,就不必担心.

    这篇关于为什么 1899-12-30 是 Access/SQL Server 中的零日期而不是 12/31?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-22 07:42