# 日期時間型
## 基本信息
日期時間型 目前采用 `OLEDate` (COMDateTime) 格式(外部套了層struct)
`OLEDate` 使用浮點類型 `double` (IEEE 754 binary64) 存儲數據
## 數據格式
| 整數部分 及 符號 | 小數部分 |
| --- | --- |
| 自 1899-12-30 至今的天數(負數表示 1899-12-30 之前) | 所在天已流經的時間(如 0.5 表示正午 12 時,0.75 表示 18 時) |
### 特別注意
***即使數值為負值,其小數部分所代表的時間仍然按照正值意義解釋***
即:
```python
# Sign = -1 or 1
# IntegralPart >= 0
# 0 <= FractionalPart < 1
if Value == Sign * (IntegralPart + FractionalPart):
DayOffest = (Sign * IntegralPart) + FractionalPart
```
例如:
- \-1.25 **并不**代表 1899-12-30 向負方向推進 1.25 天(所得結果為 `1899-12-28 18:00:00 24小時制`)
- \-1.25 實際代表 1899-12-30 向負方向推進 1 天,再向正方向推進 0.25 天(所得結果為 `1899-12-29 06:00:00 24小時制`)
## 互操作性
- .NET 程序可通過 `FromOADate` / `ToOADate` 與之進行互操作
- COM 組件所用標準的日期時間型即為 `OLEDate`
- C++ 中可用 `COleDateTime` (**并不推薦**)處理,也可自行根據數據格式處理
- Win32 中可使用 SDK 函數 `VariableTimeToSystemTime` 解析數據
- **_EOC中,庫層面 `e::system::datetime` 已經提供了基本的成員函數用于訪問日期時間型的數據,用戶層面則由時間處理相關命令提供支持_**