如何将Double Date转换为std :: string

时间:2011-11-15 10:49:32

标签: c++

我从以下代码

中获取了该方法的Date值
  DATE dDate;
  hr = pADsUser->get_PasswordLastChanged(&dDate);
  //   pADsUser is pointer variable of   IADsUser

日期类型在链接中描述 http://msdn.microsoft.com/en-us/library/82ab7w69%28v=vs.71%29.aspx

如何将这种日期转换为字符串,以便我可以在控制台中打印。

我没有在这个应用程序中使用MFC Dlls。所以我也不能使用COleDateTime类型。

是否有可用的内置方法或我是否需要手动计算日期?

3 个答案:

答案 0 :(得分:5)

查看Boost.Lexical_cast是否转换为字符串。

您必须编写一个转换器函数,将DATE类型解压缩为(日期,时间)元组,以便lexical_cast不会从double转换。

根据文档,看起来日期类型是(日 - 1899-12-30)。 (时间 - 0)。

使用boost :: date_time,您可以使用日期时间(1899-12-30,0)创建时间对象,然后增加days(abs(DATE))hours((DATE - abs(DATE)) * 24)

答案 1 :(得分:0)

TCHAR *strDate = new TCHAR[12];
tm * ptm = gmtime ( &ttAppClosing );
int day = ptm->tm_mday;
int month = ptm->tm_mon+1;
int year = ptm->tm_year;

CString sDay = L"";
sDay.Format(L"%d", day);
if(day < 9)
    sDay.Format(L"0%d", day);

CString sMonth = L"";
sMonth.Format(L"%d", month);
if(month < 9)
    sMonth.Format(L"0%d", month);

_stprintf(strDate, L"%s-%s-%d", sDay, sMonth, 1900 + year);

CString sCloseDate(strDate);

答案 2 :(得分:-1)

为什么不使用底层API呢?如果计算字节数,那么与Boost链接可能会很昂贵:P

DATE d;
CComBSTR bstr;
VarBstrFromDate(d, lcid, dwFlags, &bstr);