我花了整整一夜才找到将C ++的DATE数据类型转换为COMM中的字符串的单个示例。 我的界面函数返回以下值,我想以人类可更新的格式显示值。 像,
DATE JobStartTime;
CurrentJob->get_StartTime(&JobStartTime);
它会返回像 16324.5455等。
当我去DATE定义时,它会向我展示类似的东西,
typedef double DATE;
这再次让我感到困惑。作为DATE,它又是双倍的,所以我如何将它转换成类似的东西,
02/05/2013 11.41.25
等。 请帮助我,我是新来的。
答案 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.0
为1 January 1900, midnight
2.25
为1 January 1900, 6 AM
2.5
为1 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(依赖于语言环境)