人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: kurokw
●カテゴリ:コンピュータ
✍キーワード:C# DLL Microsoft NG VB.NET
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kohsak
●80ポイント

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が安全かと。。。。

◎質問者からの返答

ありがとうございます。

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

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

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

これが設定MAXです。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ