背景
我在 MFC/OLE 上做错了吗?
根据文档 COleDateTime 具有毫秒分辨率。 http://msdn.microsoft.com/en-us/library/a1z81fxe(v=vs.80).aspx
然而,一个 08:38:42 和 501 毫秒的 C# DateTime 传递给我非常基本的日期类型 DATE (VT_DATE) 的 MFC/COM/OLE 函数,在我有机会使用它之前四舍五入到 08:38:43。
让我担心的是,对于 23:59:59.501 的明显情况,它会将日期级联到第二天。
对于我的情况,我想在数据库中搜索,传递任何System.DateTime
包含毫秒的内容有时会跳到下一秒甚至第二天!
除了 .cpp 文件中的 VT_DATE 和 ODL 文件中的 DATE 之外,是否还有其他类型可以保留分辨率?
ODL
[id(1)] void FindEntriesFromDate(DATE dateFrom);
CPP 显示图
DISP_FUNCTION(CMyClass, "FindEntriesFromDate", FindEntriesFromDate,VT_EMPTY,VTS_DATE)
CPP 原型
void FindEntriesFromDate(DATE dateFrom);
这是证据。
我构造 C# 日期时间对象,并将它们传递给一个简单的传统 C++ MFC OLE/COM 项目,并在 ODL/CPP/H 文件中使用 DATE 参数。
向下舍入
System.DateTime(2013, 7, 12, 8, 38, 42, 499);
C++ dateFrom = 41467.360214108798
C++ OleDateTime(dateFrom).Format() results in 12/07/2013 08:38:42
C++ COleDateTime(dateFrom).GetSeconds() results in 42
围捕
System.DateTime(2013, 7, 12, 8, 38, 42, 500)
C++ dateFrom = 41467.360214120374
C++ OleDateTime(dateFrom).Format() results in 12/07/2013 08:38:43
C++ COleDateTime(dateFrom).GetSeconds() results in 43
完整的日翻转:
System.DateTime(2013, 7, 12, 23, 59,59, 501)
C++ dateFrom = 41467.999994224534
C++ OleDateTime(dateFrom).Format() results in 13/07/2013
C++ COleDateTime(dateFrom).GetSeconds() results in 0