0

背景

我在 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
4

0 回答 0