1

我整晚都在找出将 C++ 的 DATE 数据类型转换为 COMM 中的字符串的单个示例。我的接口函数返回以下值,我想以人类可红色格式显示这些值。喜欢,

DATE JobStartTime;
CurrentJob->get_StartTime(&JobStartTime);

它返回值,如 16324.5455 等。

当我去定义日期时,它会告诉我类似的东西,

typedef double DATE;

这再次让我感到困惑。作为 DATE,它又是双倍的,所以我如何将它转换成类似的东西,

02/05/2013 11.41.25

等请帮助我,我是新来的。

4

4 回答 4

4

DATE 是 COM 自动化类型。您可以使用VariantTimeToSystemTimeVariantTimeToDosDateTime

DATE JobStartTime;
CurrentJob->get_StartTime(&JobStartTime);
SYSTEMTIME st;
VariantTimeToSystemTime(JobStartTime, &st);

然后,您还可以使用SystemTimeToFileTime将其转换为 FILETIME :

FILETIME ft;
SystemTimeToFileTime(st, &ft);
于 2013-05-02T06:35:55.423 回答
1

你应该编写你自己的转换函数来得到你想要的。@John的链接非常适合您msdn.microsoft.com/en-US/library/82ab7w69%28v=vs.80%29.aspx

快捷方式: 0.00应该意味着30 December 1899, midnight Every +1.0is one +dayand every +0.25is +6 hours

例如: 2.01 January 1900, midnight 2.251 January 1900, 6 AM 2.51 January 1900, noon

于 2013-05-02T06:33:17.827 回答
0

我认为最好的选择是 VariantTimeToSystemTime (如西蒙所说),然后是 GetTimeFormat (取决于语言环境)

于 2013-05-09T14:37:33.983 回答
0

看这里http://msdn.microsoft.com/en-US/library/by5d3kb1%28v=vs.80%29.aspx

我从来没有使用过这个类,但从文档看来这就是你想要的

DATE JobStartTime;
...
CString formattedDate = COleDateTime(JobStartTime).Format();

这是如何做你想做的事VariantTimeToSystemTime

#include <windows.h>
#include <stdio.h>

int main()
{
    DATE date = 16324.5455;
    SYSTEMTIME systime;
    VariantTimeToSystemTime(date, &systime);
    printf("%02u/%02u/%04u %02d.%02d.%02d\n", systime.wDay, systime.wMonth, systime.wYear, systime.wHour, systime.wMinute, systime.wSecond);
}

输出是 09/09/1944 13.05.31

于 2013-05-02T06:24:12.580 回答