Excel Variant Date 在 1900/3/1 以前的基準日與 VB6 不同

這個狀況更詳細的說明可以到 http://support.microsoft.com/ 搜尋 Excel 1900 。
簡單的說,最早的試算表 Lotus 123 把 1900 視為閏年,理論上來說,逢四閏、逢百不閏、逢四百閏,所以 1900 年為非閏年,但是在 Excel 會有 1900/2/29 的存在,當時的設計是為了與 Lotus 123 相容而存在,就用到現在,所以到了 Excel 2007 還是這樣…
Excel 有兩組日期系統,以 1900/1/0 為 基準或是 1904/1/1 為基準。下面是個簡表,Variant Date 為 OleAut32.dll 裡面定義的 Variant Date ,VB6/VBA/VBScript 的內建 Date 型態,VBNET 可用 ToOADate/FromOADate 轉換,核心值域是依據 IEEE 754 的 Double 來設計,所以加上 Double 的對照:
Double Variant Date Excel Date 1904 Date
0 1899/12/30 1900/1/0 1904/1/1
1 1899/12/31 1900/1/1 1904/1/2
2 1900/1/1 1900/1/2 1904/1/3
58 1900/2/26 1900/2/27 1904/2/28
59 1900/2/27 1900/2/28 1904/2/29
60 1900/2/28 1900/2/29 1904/3/1
61 1900/3/1 1900/3/1 1904/3/2
62 1900/3/2 1900/3/2 1904/3/3
Variant Date 在 1900/3/1 以後就完全與 Excel Date 重合,基本上不建議採用 1904 為基礎的日期資料。
可以看出來,Excel Date 居然有個 1900/1/0 ,算是很有趣的東西,此外,Excel 不接受基準日以前的日期,所以不能有 1899/12/31 這類的日期出現,當然,若採用 1904 為基準,就完全不會出現 1904 年以前的日期。
因此在 1900/3/1 以前的日期若仍要使用在 Excel 內,必須改用 VBA 來處理,並運用 String <-> Date 來相互轉換。
廣告
Categories: Office | 標籤: | 發表留言

文章分頁導航

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: