我在VS2005.NET VC++ 使用Unicode字符集,用MFC 编程取当前时间,用下面的程序段:    CTime m_time = GetCurrentTime();
    CString str_time=m_time.Format(L"%Y/%m/%d %H:%M:%S");
    MessageBox(str_time,L"显示当前时间");
遇到下面的问题:
    1.取出的系统当前日期是:1970/04/18,为什么不是系统当前的日期?
    2.如果我把格式字符串改成下面的形式:        CString str_time=m_time.Format(L"%Y年%m月%d日 %H:%M:%S");    即在格式化字符串加上汉字后,则格式化后的字符串是空的!为什么?怎么样解决?请专家给出解决的办法,谢谢!

解决方案 »

  1.   

    CTime m_time = CTime::GetCurrentTime();
      

  2.   

    CString str_time = CTime::GetCurrentTime().Format( _T( "%Y年%m月%d日 %H时%M分%S秒" ) );
      

  3.   

    http://blog.csdn.net/tiger119/archive/2005/10/22/513526.aspx
      

  4.   


    pomelowu(羽战士) :
    我打开了您给的网页,谢谢你,看来这个函数在Unicode下是不能用,也没有替代的函数,Microsoft不知是否发现了这个问题,不知以后是否能改正过来.我不知道这个博客是不是你的,文中说他已经解决了这个问题,但是我运行了他提供的程序,还是有问题,原文如下:
    [解决办法]
        抛弃CTime这个低级垃圾东东,换上新式武器。
        我另写了一个格式化的函数,为了与以前兼容,我仍接受CTime的输入。CString CBaseUtil::FormatDateTime(const CTime &t)
    {
        CString sRet(_T(""));
        if(!t.GetLocalTm()) return sRet;  //t未初始化,不合法。
        //或者断言 ASSERT(t.GetLocalTm())    //格式化串的格式可参见VarFormat的帮助
        //如:最近计算时间: yyyy,mm,dd hh:nn:ss
        CString sFormat = sFormat.LoadString(格式化串); 
        COleDateTime dt(t.GetYear(),t.GetMonth(),t.GetDay(),
        t.GetHour(),t.GetMinute(),t.GetSecond());    COleVariant var(dt);
        BSTR bstrOut = sRet.AllocSysString();
    #ifdef _UNICODE
             VarFormat(var,sFormat.GetBuffer(0),0,0,0,&bstrOut);
    #else
             USES_CONVERSION;
             VarFormat(var,A2W(sFormat.GetBuffer(0)),0,0,0,&bstrOut);
    #endif
             sRet = bstrOut;
             ::SysFreeString(bstrOut);
             return sRet;
    }    好了,上述的做法就OK了,如果不用CTime做参数,那最好,因为CTime
    范围也比较窄,可直接使用COleDateTime。
    作者说已经"OK"了,但是我在编译时有两个问题:
    1.原文给出的程序的第二行:    if(!t.GetLocalTm()) return sRet;  //t未初始化,不合法。所用的函数t.GetLocalTm()是要有参数的,没有参数是通不过的;2.下面的语句:    CString sFormat = sFormat.LoadString(格式化串); 也是有问题的.不知道作者是怎么样"OK"的?能不能给个能通得过的程序啊,否则让我们初学者云里雾里的,摸不着头脑.
     多谢了!!!