dポイントプレゼントキャンペーン実施中!

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という条件には出来ません.

どのようにすれば月によって変化する日数を区別して,
正しい入力かの判定が出きるのでしょうか?

アドバイスを頂きたいです.よろしくお願いします.

A 回答 (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));
}
}
    • good
    • 0

No2さんの


SimpleDataFormatを使っても
2010/2/29は例外が発生しないわ。

もう一手間必要よ。

setLenient(false)
を使う必要があるわ。
    • good
    • 0

> 正しく入力されたかどうかの確認をしたいのですが



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で、受け取って、処理も出来ます。

ちなみにの、独自のフォーマットも良いのですが。
一般的なフォーマットを利用すると、後々
便利なような気がします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!