说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何得到N个月以前的年、月

编辑:说三道四文库 发布时间:2018-06-25 03:00
HTML文档下载 WORD文档下载 PDF文档下载
如题
采用TDateTime, 具体可查查帮助, 很详细的.
AnsiString GetLastDate(AnsiString now,unsigned short last_month)
{
    double d_day;
    unsigned short y,m,d;//年月日
    AnsiString s;
    TDate theDate;
    char temp[32];

    s=now;

    if(s.ToIntDef(0)<19800101)//不合法日期
    {
        throw(Exception("不合法日期"));
    }


    y=s.SubString(1,4).ToIntDef(0);
    m=s.SubString(5,2).ToIntDef(0);
    d=s.SubString(7,2).ToIntDef(0);

    try{
        theDate=TDate(y,m,d);//测试有效日期
    }catch(...)
    {
        throw(Exception("不合法日期"));
    }

    m-=1;

    y=y-3+(12*3+m-last_month)/12;
    m=(12*3+m-last_month)%12;

    m+=1;

    again:
    try{
        theDate=TDate(y,m,d);
    }catch(...)
    {
        d-=1;
        goto again;
    }
    theDate=theDate+1.0;
    return theDate.FormatString("yyyyMMdd");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::menu_SixMonthClick(TObject *Sender)
{
    try{
        Edit_TimeStart->Text=GetLastDate(Edit_TimeEnd->Text,6);//最近六个月
    }catch(Exception &E)
    {
        ShowMessage(E.Message);
        Edit_TimeStart->SetFocus();
        return;
    }
}
//---------------------------------------------------------------------------
具体程序我就不说了
给你一个步骤吧
将当前时间用IncMonth来得到N个月以前的时间
然后用DecodeDate 来得到年月日
函数的具体用法看帮助吧
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘