- - PR -
日付のチェックについて
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-11-08 11:31
こんにちわ。みーちくと申します。
JAVAでの日付のチェックはみなさんはどうしてますか? 私はまだJAVAの初心者なので、半角のみチェックしているのですが、 やはりもう少しチェックしたいと考えております。 なにか良い方法などありましたら、ご教授願います。 宜しくお願い致します。 | ||||
|
投稿日時: 2002-11-08 12:33
もしJava2の1.4とか使っていらっしゃるなら、正規表現なんか使うのはいかがでしょうか。文字列のパターンチェックや、文字列内の特定部分から文字を抽出するなどが楽にできます。詳しくは調べていただくとして、
http://www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/NewIO/RegularExpressions/RegularExpressions.html で、1.4用の解説がありましたよ。 | ||||
|
投稿日時: 2002-11-08 12:38
小僧さん。
早速の返信ありがとうございました。 実はJavaは1.3なんですぅ。 すみません。はじめに書いておけば良かったですね。 あれからいろいろ調べてはみたんですが、setLenientを使えばよいというページがあったんですが、使い方がわかりません。ご存知ですか? | ||||
|
投稿日時: 2002-11-08 13:47
正規表現を使わなくても java.text.SimpleDateFormat を使えばチェックできると思います。詳しくはJavaDocを読んでみてください。
> 実はJavaは1.3なんですぅ。 便利なJakartaプロジェクトにて正規表現用パッケージがダウンロードできます。 http://jakarta.apache.org/regexp/index.html > setLenientを使えばよいというページがあったんですが、使い方がわかりません。ご存知ですか? こちらをどうぞ。 http://www.gimlay.org/~javafaq/S100.html#S100-03 | ||||
|
投稿日時: 2002-11-08 15:32
H2さん。
回答ありがとうございました。 早速調べて見たいと思います。 出来上がったら、またお知らせします。 | ||||
|
投稿日時: 2002-11-09 02:39
java.util.DateFormat あたりにかけて Exception を catch するという方法も。
# うそくせー(わ | ||||
|
投稿日時: 2002-11-11 16:23
みーちくです。
setLenientを使用して、作成してみました。 【ソース】 public static String getDateError(String str, String title) { String message = ""; String str_date = str; String str_year = ""; String str_month = ""; String str_day = ""; int int_year = 0; int int_month = 0; int int_day = 0; int int_index1 = 0; int int_index2 = 0; int_index1 = str_date.indexOf('/'); if(int_index1 > 0){ int_index2 = str_date.indexOf('/',int_index1 + 1); } if((int_index1 > 0) && (int_index2 > 0)){ str_year = str_date.substring(0,int_index1); str_month = str_date.substring(int_index1 + 1,int_index2); str_day = str_date.substring(int_index2 + 1); int_year = Integer.parseInt(str_year); int_month = Integer.parseInt(str_month); int_day = Integer.parseInt(str_day); } Calendar cal = Calendar.getInstance(); cal.setLenient( false ); cal.set(int_year, int_month -1, int_day); try { cal.get(cal.YEAR); } catch (IllegalArgumentException e) { message = "<li>[" + title + "] 指定の年月日は存在しません。<br>"; } return message; } なんかすごく長いソースになってしまいました。 H2さんやしょむさんが教えてくれた、java.text.SimpleDateFormatの使い方がやっぱりよくわかりません。 下のようなソースで実行すると、下記のようなエラーとなります。 やっぱり、使い方がまずいのでしょうか。 宜しくお願い致します。 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date class Date_test { public static void main(String[] args) { String str = "20021111"; DateFormat df = new SimpleDateFormat("yyyy/MM/dd (EE)"); System.out.println(df.format(str)); } } | ||||
|
投稿日時: 2002-11-11 17:00
多分こういう使い方だと思います。
手順としては、 1.SimpleDateFormatオブジェクトを作る。 2.applyPattern()で日付のフォーマットを指定する。 3.parse()メソッドで文字列をDate型にパーズする。もし、日付のフォーマットが指定したフォーマットと違うとParseExceptionが出るのでそれをキャッチする。 String str = "2002/11/11"; //元の文字列 を"2002-11-11"や"11/11/2002"に変えたりするとParseExceptionが出ます。 df.applyPattern("yyyy/MM/dd"); の中の文字列を変えるとフォーマットを変えられます。 例)df.applyPattern("yyyy年MM月dd日"); にすると、"2002年11月11日"などにも対応できます。 フォーマットに関してはJavadocを見てください。 | ||||
