全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1705
推到 Plurk!
推到 Facebook!

請指教判斷是否爲合法日期的權威算法

答題得分者是:cashxin2002
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-14 16:03:16 IP:60.191.xxx.xxx 未訂閱
寫了兩支判斷是否爲合法日期的算法,但總有點問題,請各位賜教,謝謝 程式一:(某些機器上輸入了一個非法日期後,後導致程式出錯,提示“1999/02/31不是一個合法的日期值”) function blnisdate(strYear,strMonth,strDay:string):boolean; var y,m,d:word; n:TDate; begin n:=strtodate(strYear '-' StrMonth '-01'); decodedate(n,y,m,d); if rightstr(DateToStr(EndOfAMonth(y,m)),2)>=strDay then result:=True else result:=False; 程式二:(在某些機器上明明是正確的日期確告訴用戶日期不合法) function blnisdate(strYear,strMonth,strDay:string):boolean; var st: string; begin st:=strYear '-' strMonth '-' strday; try StrToDate(st); Result := True; except Result:=False; end; end; 請問一下各位是怎麽實現的,有無權威的算法?謝謝! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神!
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-14 16:45:24 IP:210.65.xxx.xxx 未訂閱
Hi WoodTiger,    我猜測應該是前端日期格式設定不一致所引起,改成如下測試看看
  function blnisdate(strYear,strMonth,strDay:string):boolean;
    var
      st: string;
      DS : Char;
      SDF : String;
    begin
      SDF := ShortDateFormat;
      DS := DateSeparator;
      DateSeparator        := '-';
      ShortDateFormat := 'yyyy-mm-dd';
      st := strYear   '-'   strMonth   '-'   strday;
      try
        StrToDate(st);
        Result := True;
      except
        Result:=False;
      end;
      DateSeparator := DS;
      ShortDateFormat := SDF;
    end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-14 16:54:48 IP:60.191.xxx.xxx 未訂閱
謝謝您了,我試試! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神!
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-14 17:04:14 IP:202.62.xxx.xxx 未訂閱
您好﹗    可以使用IsValidDate函數來判斷日期格式是否正确﹕
uses DateUtils
begin
  If IsValidDate(2005,2,29) then
    ShowMessage('正确格式')
  else
    ShowMessage('錯誤格式');
end;
相關的函數還有IsValidTime和IsValidDateTime ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-15 18:14:35 IP:220.130.xxx.xxx 未訂閱
這類相關的函式有許多, 也可以參考Try開頭的函式。 function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean;
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-16 14:17:23 IP:60.191.xxx.xxx 未訂閱
非常感謝Fishman、cashxin2002和yorkland。 按Fishman的方法改了程式後,用戶這裏沒有再說有錯誤了,真是謝謝 cashxin2002和yorkland說的小弟仔細學習,謝謝 很爲難奧,分只能給一個人,真對不住其他兩位了,請以後繼續幫助小弟,謝謝! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神!
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-16 16:59:37 IP:210.65.xxx.xxx 未訂閱
Dear All,    我覺得 cashxin2002 版大的方法比較好用!     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-05-22 5:35:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!