zoukankan      html  css  js  c++  java
  • CTime,Systemtime的比较还有转换成日期格式。

    vc为我们提供了两种日期型的变量。

    一种是CTime。他的缺点就是年份只支持到2038年,以后的日期就不支持啦,如果你的项目有20-30年的寿命,你就选择使用SYSTEMTIME.这个时间函数来进行比较还有转换。

    一种是SYSTEMTIME。

    在比较的时候都不能直接比较。看一下第一种CTime .

    CTime timeFrom;
    m_dateFrom.GetTime(timeFrom);

    CTime timeTo;
    m_dateTo.GetTime(timeTo);

    CTimeSpan timeSpan=timeTo-timeFrom;
        if(timeSpan.GetDays()<0)
    {
            AfxMessageBox(_T("Date illegal"));
    return;
    }

    代码就不解释啦。

    转换成日期格式

    CString dateFrom=timeFrom.Format(_T("%Y-%m-%d"));

    CString dateTo=timeTo.Format(_T("%Y-%m-%d"));

    这样你就可以查询两个日期之间的数据啦。

    再看一下,SYSTEMTIME的比较,还是转换成日期格式。

    一样也是定义两个变量。


    SYSTEMTIME timeFrom,timeTo;
    m_dateFrom.GetTime(&timeFrom);
    m_dateTo.GetTime(&timeTo);

    但是这两个时间怎么比较呢,查了好多资料,都是要转换成CTime进行比较。

    这样字就没有意义啦。

    再在来介绍一种内存比较方法。

    两个日期进行内存比较就可以判断出大小来。也不用费事去转换。

    int re=memcmp(&timeFrom,&timeTo,sizeof(SYSTEMTIME));
    if (re>0)
    {
    AfxMessageBox(_T("Date illegal"));
    return;
    }

    如果是re>0就说明第一个选择的日期比第二个大。

    如果是re<0就说明第一个选择的日期比第二个小。

    如果是re=0就说明第一个选择的日期等于第二个。

    下来看一下怎么把SYSTEMTIME转换成日期格式xxxx-xx-xx

    先来看一下他的几种写法分别出来的效果是什么样子的。

    VariantTimeToSystemTime(NULL,&timeFrom);

    如果是这样写的话,不管你的日期选择的是哪一天,永远都是一天,是哪一天呢。1899-12-30日。

    加个这个看看行不行

     COleDateTime oleTime;

    VariantTimeToSystemTime(oleTime,&timeFrom);

    结果运行结果还是一样,还是那一天。

    就没有解决办法了吗?

    看一下这样定义行不行。

    DATE date;

    VariantTimeToSystemTime(date,&timeFrom);

    CString dateFrom;
    dateFrom.Format(_T("%04u-%02u-%02u"),timeFrom.wYear,timeFrom.wMonth,timeFrom.wDay);

    这样就可以完全显示成XXXX-xx-xx的格式啦。








  • 相关阅读:
    codevs 1102 采药 2005年NOIP全国联赛普及组
    codevs 1058 合唱队形 2004年NOIP全国联赛提高组
    动归题目
    友好城市//未测,不知对错
    codevs 1044 拦截导弹 1999年NOIP全国联赛提高组
    codevs 5294 挖地雷
    codevs 1576 最长严格上升子序列
    [BZOJ3289]Mato的文件管理
    [CodeVS1299]切水果
    [TYVJ1473]校门外的树3
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3174601.html
Copyright © 2011-2022 走看看