DateTimePicker 與 日期 Date 相減 問題 |
答題得分者是:老大仔
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
我設定兩個 DateTimePicker 然後要算出兩個日期之間相差幾天。
本來應該是 DateTimePicker1 - DateTimePicker2 就可以得到相差天數。 或者用 DaysBetween 需要 #include 但是卻出現在初始化的時候,如果我使用 Now() 當我用 2011/12/15 - 2011/12/14 傳回的居然是0 改用 DTP1->DateTime = StrToDate(FormatDateTime("yyyy/mm/dd",Now()-1)); 就得到正確的答案1 我有想過可能是2012/02/29的問題,但是看起來不是? 其中函數我用的是文字轉日期,也想過會不會是直接文字轉日期(SDay,Eday)與DateTimePicker Date (D1,D2)不同所造成的。 會不會是這個問題?有人知道的話請指教一下喔。 附件是函數要計算的日期示意圖 [code cpp] //初始化 //DTP1->DateTime = Now(); //使用Now 會讓日期加減少一天 但是轉成文字後就不會 //DTP2->DateTime = Now(); DTP1->DateTime = StrToDate(FormatDateTime("yyyy/mm/dd",Now()-1)); //此方法可以解決,但是很怪異,有可能跟2012/02/29有關 DTP2->DateTime = StrToDate(FormatDateTime("yyyy/mm/dd",Now())); //函數 int __fastcall TForm1::CalDayCount(TDate D1, TDate D2, TDate SDay, TDate EDay) { int TDay=0; if(D1>SDay && D1<=EDay) //1 { TDay = EDay - D1; //TDay = 1; //*******????? //Memo1->Lines->Add("D1: " FormatDateTime("yyyy-mm-dd",D1)); //Memo1->Lines->Add("D2: " FormatDateTime("yyyy-mm-dd",D2)); //Memo1->Lines->Add("SDay: " FormatDateTime("yyyy-mm-dd",SDay)); //Memo1->Lines->Add("Eday: " FormatDateTime("yyyy-mm-dd",EDay)); //Memo1->Lines->Add("1: " IntToStr(TDay)); }else if(D2>=SDay && D2 Memo1->Lines->Add("2: " IntToStr(TDay)); }else if(D1<=SDay && D2>=EDay) { //3 TDay = EDay - SDay; Memo1->Lines->Add("3: " IntToStr(TDay)); }else if(D1>SDay && D2 Memo1->Lines->Add("4: " IntToStr(TDay)); }else{ TDay = 0; Memo1->Lines->Add("5: " IntToStr(TDay)); } return TDay 1; } //--------------------------------------------------------------------------- [/code] |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
根據Help的說法 是分鐘數也有算入的樣子 假如 Day1: 2012/4/12 09:42:47 DaysBetween(Day1, Day2) 那麼就會算成是1天 假如 Day1: 2012/4/42:47 Day2: 2012/4/43:47 DaysBetween(Day1, Day2) 那麼就會算成是0天 假如 Day1: 2012/4/42:47 Day2: 2012/4/41:47 DaysBetween(Day1, Day2) 那麼就會算成是1天 ===================引 用 juneo 文 章===================請問這個現象是由哪邊引起的, 因為會影響到以後初始設定需要用哪個方法,日期才會正確 ===================引 用 老大仔 文 章=================== 然後我又用了另一語法測試(Delphi) 是有變正確了... ShowMessage(IntToStr(Round(DateTimePicker1.Date - DateTimePicker2.Date)));
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
剛剛又測試了一下(Delphi環境):
ShowMessage(IntTostr(DaysBetween(StrToDate('2012/4/13'), StrToDate('2012/4/12')))); 回傳的差是1天 ShowMessage(IntTostr(DaysBetween(DateTimePicker1.Date, DateTimePicker2.Date))); 回傳的差是0天 所以我在"猜"... 它在轉換時"應該"有把Time算進去 所以會有誤差 解決方式可能是先將日期取出來放到變數中再做DaysBetween....吧
|
juneo
高階會員 發表:103 回覆:190 積分:118 註冊:2004-05-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |