C#でVB.NETで言うIsDateのようなことがしたいのですが、Exceptionを投げると激しくパフォーマンスが遅くなるため、ベタで論理チェックを行いたいのですが、良いサンプルのあるページ等はないでしょうか?VB.NETのDLLを使用してMicrosoft.VisualBasic.Information.IsDateを使用するのはNGです。あくまでC#でできるだけ早く(少なくともExceptionを投げるよりも)日付チェックを行いたいと思っています。宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2003/11/04 17:06:55
  • 終了:--

回答(1件)

id:kohsak No.1

kohsak回答回数18ベストアンサー獲得回数02003/11/04 18:16:42

ポイント80pt

http://www.hatena.ne.jp/1067933215#

C#でVB.NETで言うIsDateのようなことがしたいのですが、Exceptionを投げると激しくパフォーマンスが遅くなるため、ベタで論理チェックを行いたいのですが、良いサンプルの.. - 人力検索はてな

URLはダミーです。

自分が作ったやつでよければ。。。

private bool DateCheck(string pstrDate)

{

int[] intMpD = {0,31,29,31,30,31,30,31,31,30,31,30,31}; //各月の最大日数を保持

string[] strYMD = pstrDate.Split(’/’); //YYYY,MM,DDで分割

int year = 0;

int month = 0;

int day = 0;

try

{

//フォーマットチェック(YYYY/MM/DD)

if(!(new Regex(@”^[1-2]¥d{3}¥/¥d{1,2}¥/¥d{1,2}$”).IsMatch(pstrDate))){return false;}

year = Convert.ToInt32(strYMD[0]);

month = Convert.ToInt32(strYMD[1]);

day = Convert.ToInt32(strYMD[2]);

if(month < 1 || 12 < month) {return false;} /*月のチェック*/

if(day < 1 || intMpD[month] < day) {return false;} /*日のチェック*/

if(month != 2) {return true; } /*閏年チェック*/

if(day < 29) {return true; } /*閏年チェック*/

if((year%4==0)&&((year%100!=0)||(year%400==0))) {return true; } /*閏年チェック*/

return false;

}

catch

{

return false;

}

}

***テスト結果***

上記のコーディングとDateTime.Parseを各10000回実行時の処理時間。

上記のコーディング DateTime.Parse

正常な日付(2003/11/04) 00:00:00.2203168 00:00:00.1101584

異常な日付(2003/2/29) 00:00:00.1001440 00:00:18.1661216

一応うるう年の対応もしています。またフォーマットはご使用目的に

あわせて変更してください。

でも、自分的にはやっぱりDateTime.Parseが安全かと。。。。

id:kurokw

ありがとうございます。

参考にさせていただきます。

(というか、正に求めていたものです)

もっと、いっぱいポイントお渡ししたいところなんですが・・

これが設定MAXです。

どうもありがとうございました。

2003/11/04 18:30:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません