2014年6月14日土曜日

[Java] 文字列がSQL ServerのDateTime型に適合するかチェックする

How to validate the DateTime format
Javaには文字列が日付に適合するかを調べるDateFormatクラスがあります。
DateFormatクラスで日付に適合した文字列がSQL ServerのDateTime型に適合できないことがありました。

そこでJavaでSQL ServerのDateTime型の適合するかチェックする機能を作ってみました。

SQL ServerのDateTime型の仕様

・年月日のセパレーターはハイフン(-)
・時分秒のセパレーターはコロン(:)
・年は1753から9999まで
・最小単位は1ミリ秒

年月日のセパレーターはハイフンの他、スラッシュ (/)やピリオド (.) も可能ですが今回はハイフンのみ可とします。
また、扱える最大値は9999-12-31 23:59:59.997でこれを1ミリ秒でも超えると扱えませんが今回は無視します。
他にもSQL ServerのDateTimeに適合するケースは沢山ありますが今回は次の書式を可とします。

YYYY-MM-DD hh:mm:ss.n*
・YYYYは1753~9999の年を表す
・MMは01~12の月を表す
・DDは01~31の日を表す
・hhは00~23の時を表す
・mmは00~59の分を表す
・ssは00~59の秒を表す
・n*は0~999のミリ秒を表す(省略可)


サンプル



なんだか汚いコードになってしまいました。

isDateTimeFormat(String source) メソッドの内容が日付型の適合をチェックする部分です。
staticなmainメソッドから呼ばれるため、isDateTimeFormatメソッドもstaticにしてます。 非staticメソッドから呼び出す場合はstaticにする必要はありません。
日付として適合ならtrue、不適合ならfalseを返します。
はじめにパターンマッチで書式をチェックします。
書式がOKだったら各要素が日付として正しいかチェックします。

関連ブログ

[Java] SwingのUIを無限ループで更新するには
[Android] PrintStream#printfの最適化(SDK r08でのエラーを別の方法で解決する)
[Android] Javaのstaticクラスから非sataticメソッドを呼び出すには
[Blender] obj2opengl.plをJava用に改造する
[Windows8][Android] EclipseをXP互換モードで起動する理由(Can't bind to local 8600 for debugger)
[Android] Activityに時計を表示する(Activityの非同期更新)
[Android] アナログ時計のアプリを作ってみました
[Android] ストップウォッチアプリを作ってみました
[Android] 方位センサーを使ってコンパスアプリを作る
[Android] OpenGLの簡易画像ビュアーにSDカード内の画像を表示する
[Android] Android-SDKでやってはいけないこと


以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿