基本信息
在 OLE 中,对于时间的存储,传统上采用 OLEDate (或称 COMDateTime / OADate) 格式
数据格式
OLEDate 在底层使用浮点类型 double (IEEE 754 binary64) 存储数据
| 整数部分 及 符号 | 小数部分 |
|---|---|
| 自 1899-12-30 至今的天数(负数表示 1899-12-30 之前) | 所在天已流经的时间(如 0.5 表示正午 12 时,0.75 表示 18 时) |
特别注意
即使数值为负值,其小数部分所代表的时间仍然按照正值意义解释
即:
# Sign = -1 or 1
# IntegralPart >= 0
# 0 <= FractionalPart < 1
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 与之进行互操作
VB6 / 易语言 的 日期时间 均使用 OLEDate 格式存储
COM / OLE 组件所用的标准日期时间型即为 OLEDate
C++ 中可用 COleDateTime (MFC组件,虽然并不推荐使用MFC)处理,也可自行根据数据格式处理
Win32 中可使用 SDK 函数 VariableTimeToSystemTime 解析数据
