关于用vector记录查询时间段内的月份
用4个ComboBox分别记录查询的起止年月,想用向量记录起止年月之间的所有月份,比如选择查询时间从2008年3月到2009年5月,则在向量里记录下200803,200804,200805……200904,200905。请问怎么实现呢?
[解决办法]
这个不难,自己做个逐月递增函数,如:
AnsiString end = "200905", start = "200803";
while (start < end) {
添加start到vector;
start = next(start);
}
添加end到vector;
AnsiString next(AnsiString p)
{
处理逐月递增;
}
[解决办法]
- C/C++ code
void __fastcall TForm1::FormCreate(TObject *Sender){ ComboBox1->Clear(); for(int i=2000;i<=2010;i++) ComboBox1->Items->Add(i); ComboBox1->ItemIndex = 0 ; ComboBox2->Clear(); for(int i=1;i<=12;i++) ComboBox2->Items->Add(i); ComboBox2->ItemIndex = 0 ; ComboBox3->Clear(); for(int i=2000;i<=2010;i++) ComboBox3->Items->Add(i); ComboBox3->ItemIndex = 0 ; ComboBox4->Clear(); for(int i=1;i<=12;i++) ComboBox4->Items->Add(i); ComboBox4->ItemIndex = 0 ;}//---------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){ String ls_BeginDate = ComboBox1->Text + "-"+ ComboBox2->Text +"-01 00:00:000"; String ls_EndDate = ComboBox3->Text + "-"+ ComboBox4->Text +"-01 00:00:000";; int a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ; while(a>0) { ls_BeginDate = IncMonth(TDateTime(ls_BeginDate),1) ; ListBox1->Items->Add(TDateTime(ls_BeginDate).FormatString("YYYYMM")); a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ; }}
[解决办法]
- C/C++ code
void __fastcall TForm1::Button1Click(TObject *Sender){ vector <String> vec ; //Add String ls_BeginDate = ComboBox1->Text + "-"+ ComboBox2->Text +"-01 00:00:000"; String ls_EndDate = ComboBox3->Text + "-"+ ComboBox4->Text +"-01 00:00:000";; int a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ; while(a>0) { ls_BeginDate = IncMonth(TDateTime(ls_BeginDate),1) ; //ListBox1->Items->Add(TDateTime(ls_BeginDate).FormatString("YYYYMM")); vec.push_back(TDateTime(ls_BeginDate).FormatString("YYYYMM")); //Add a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ; }}
[解决办法]
inline void IncMonth(int &Y,int &M) { if(++M > 12) {++Y ;M = 1 ;} }
inline AnsiString FormatMonth(int M)( M > 9 ? IntToStr(M) : "0"+IntToStr(M) ; )
void TForm1::MyFunGetVector(vector <AnsiString> &Date1)
{
int Y1 = ComboBox->Text.ToInt();
int M1 = ComboBox->Text.ToInt();
int Y2 = ComboBox->Text.ToInt();
int Y2 = ComboBox->Text.ToInt();
int size = Y2*12+M2 -Y1*12-M1 + 1;
if(size < 0)
date1.clear();
else
date1.resize(size);
for( vector <AnsiString>::iterator pos = date1.begin();
pos != date1.end();
++pos,IncMonth(Y1,M1))
*pos = IntToStr(Y1)+FormatMonth(M1) ;
};
[解决办法]
写好后检查,发现错误
1、少了一个括号:
inline AnsiString FormatMonth(int M)( M > 9 ? IntToStr(M) : ("0"+IntToStr(M)) ; )
2、把Y1Y2M1M2与对应的ComboBox1234 改一改。
int Y1 = ComboBox1->Text.ToInt();
int M1 = ComboBox2->Text.ToInt();
int Y2 = ComboBox3->Text.ToInt();
int M2 = ComboBox4->Text.ToInt();
3、if(size < 0) 应为 if(size <= 0)
(CSDN经常让写好的东西丢失,现在一般一写完我就回复,然后再检查。要不检查时间久了,回复失败就什么都没有了。)