在COM c ++中将日期转换为字符串

时间:2013-05-02 06:13:31

标签: c++ visual-c++ com

我花了整整一夜才找到将C ++的DATE数据类型转换为COMM中的字符串的单个示例。 我的界面函数返回以下值,我想以人类可更新的格式显示值。 像,

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

它会返回像 16324.5455等。

当我去DATE定义时,它会向我展示类似的东西,

typedef double DATE;

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

02/05/2013 11.41.25

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

4 个答案:

答案 0 :(得分:3)

DATE是COM Automation类型。您可以使用VariantTimeToSystemTime VariantTimeToDosDateTime

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

然后,您还可以使用SystemTimeToFileTime将其变为文件时间:

FILETIME ft;
SystemTimeToFileTime(st, &ft);

答案 1 :(得分:1)

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

快捷方式: 0.00应该是30 December 1899, midnight 每个+1.0只有一个+day和 每个+0.25都是+6 hours

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

答案 2 :(得分: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

答案 3 :(得分:0)

我认为最好的选择是VariantTimeToSystemTime(如Simon所述),然后是GetTimeFormat(依赖于语言环境)