OLE Automation date format

OLE Automation date format

[2] Lotus 1-2-3グレゴリオ暦を採用していますが、 1900年は閏年としていました。1900年2月29日が挿入されるため、 取り扱い可能な最初の日である1900年1月1日から1900年2月28日までが、 グレゴリオ暦とは1日ずれています。

[3] 誤方互換性のため、 Microsoft Excel がこれを踏襲しています >>1

[4] Excel の 1900 年を基準とした日付方式と 1904 年を基準とした日付方式の違いについて () https://support.microsoft.com/ja-jp/kb/214330

[5] Days of the week before March 1, 1900 are incorrect in Excel () https://support.microsoft.com/en-us/kb/214058

[6] Excelだけに存在する日付 | ユニリタブログ () http://www.unirita.co.jp/blog/data-utilization/data-linkage/20141202.html

この記載によると、Office Open XML形式ファイルの仕様上は、(マイナス数値を使って)0001/01/01から扱うことができ、「1900/02/29」は存在しないことになっています(なので、1900/02/28より前の日付において、仕様とExcelの実装には差異があります)。過去の「ECMA-376」では、「1900/02/29」は「古い表計算ソフトとの互換のため」として定義があったと記憶しているので、版が進んだことでその仕様は無くなったようです。

[7] Excelだけに存在する日付 | ユニリタブログ () http://www.unirita.co.jp/blog/data-utilization/data-linkage/20141202.html





[8] Standard ECMA-376 () http://www.ecma-international.org/publications/standards/Ecma-376.htm ECMA-376 1st edition Part 4 1919ページ

date1904 (Date 1904)

Specifies a boolean value that indicates whether the date systems used in the workbook starts in 1904.

A value of on, 1, or true indicates the date system starts in 1904.

A value of off, 0, or false indicates the workbook uses the 1900 date system, where 1/1/1900 is the first day in the system.

The default value for this attribute is false.

The possible values for this attribute are defined by the XML Schema boolean datatype.

[9] DateTime.ToOADate Method (System) () https://msdn.microsoft.com/en-us/library/system.datetime.tooadate(v=vs.110).aspx

An OLE Automation date is implemented as a floating-point number whose integral component is the number of days before or after midnight, 30 December 1899, and whose fractional component represents the time on that day divided by 24. For example, midnight, 31 December 1899 is represented by 1.0; 6 A.M., 1 January 1900 is represented by 2.25; midnight, 29 December 1899 is represented by -1.0; and 6 A.M., 29 December 1899 is represented by -1.25.

The base OLE Automation Date is midnight, 30 December 1899. The minimum OLE Automation date is midnight, 1 January 0100. The maximum OLE Automation Date is the same as DateTime.MaxValue, the last moment of 31 December 9999.

[10] How to recognize different types of timestamps from quite a long way away – The Old New Thing () https://blogs.msdn.microsoft.com/oldnewthing/20030905-02/?p=42653/

The OLE automation date format is a floating point value, counting days since midnight 30 December 1899. Hours and minutes are represented as fractional days.

[11] グレゴリオ暦?ユリウス暦? データベースによって異なる、日付時刻型が扱える範囲 | ユニリタブログ () http://www.unirita.co.jp/blog/data-utilization/data-linkage/20141216.html












Microsoft Accessでは、全期間にわたってグレゴリオ暦として扱われます。

[12] 1月0日 - Wikipedia () https://ja.wikipedia.org/wiki/1%E6%9C%880%E6%97%A5

マイクロソフト・エクセルによる1900年日付様式によれば、1900年1月0日はJanuary 0, 1900と表示された[3](これはもともと、Lotus 1-2-3とのバグ互換のために入っていた調整に由来する。

[13] Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法 () https://support.microsoft.com/ja-jp/help/210276/how-to-store-calculate-and-compare-date-time-data-in-microsoft-access