- ベストアンサー
時間を表す文字列を時刻に変換
java eclipse3.5を使ってプログラミングを勉強しています. コンソール画面で入力した時間型文字列を時刻に変換するためにカレンダークラスを使っています. 入力のフォーマットは次のようにしたいです. ex. 2010:01:25:00:00:00 入力した文字列が正しくなければ、つまり月の入力ならば1~12、日ならば月に相当した数値、時間なら0~23、分なら0~59、秒なら0~59という ことを判定して、この条件を満たさないなら再入力をさせたいです. ちなみに2010:01:25:00:00:00を年,月,日などに分割するために, splitメソッドを使い':'で分割しています. String time = "2010:01:25:00:00:00"; String[] time_para = time.split(":"); とすればtime_para[0]が年,time_para[1]が月,…というようになります. Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(time_para[0], time_para[1] - 1, time_para[2], time_para[3], time_para[4], time_para[5]); Time = calendar.getTimeInMillis(); というようにして時間に変換しています. 正しく入力されたかどうかの確認をしたいのですが,月によって1ヶ月の日の数が異なるため、time_para[1]が0から30ならOKという条件には出来ません. どのようにすれば月によって変化する日数を区別して, 正しい入力かの判定が出きるのでしょうか? アドバイスを頂きたいです.よろしくお願いします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
import java.util.*; import java.text.*; class hoge{ public static void main(String[] args){ String time = "2010:12:25:00:71:00"; String[] time_para = time.split(":"); Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set( Integer.parseInt(time_para[0]), Integer.parseInt(time_para[1]) - 1, Integer.parseInt(time_para[2]), Integer.parseInt(time_para[3]), Integer.parseInt(time_para[4]), Integer.parseInt(time_para[5]) ); SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss"); System.out.println(sdf.format(calendar.getTime()).equals(time)); } }
その他の回答 (2)
- askaaska
- ベストアンサー率35% (1455/4149)
No2さんの SimpleDataFormatを使っても 2010/2/29は例外が発生しないわ。 もう一手間必要よ。 setLenient(false) を使う必要があるわ。
- tom11
- ベストアンサー率53% (134/251)
> 正しく入力されたかどうかの確認をしたいのですが String da = "2010/01/25 23:12:"; SimpleDateFormat df = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss"); Date d=null; try { d = df.parse(da); } catch (ParseException ex) { System.out.println("フォーマットエラーです。"); return; } System.out.println(d.toString()); 質問者さんのフォーマットでは、N01さんが書いているとおりです 例えば、今回のようにフォーマットが違う場合、 秒がかけたとき エラーが発生しますので try catchで、受け取って、処理も出来ます。 ちなみにの、独自のフォーマットも良いのですが。 一般的なフォーマットを利用すると、後々 便利なような気がします。