![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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という条件には出来ません.
どのようにすれば月によって変化する日数を区別して,
正しい入力かの判定が出きるのでしょうか?
アドバイスを頂きたいです.よろしくお願いします.
No.1ベストアンサー
- 回答日時:
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));
}
}
No.3
- 回答日時:
No2さんの
SimpleDataFormatを使っても
2010/2/29は例外が発生しないわ。
もう一手間必要よ。
setLenient(false)
を使う必要があるわ。
No.2
- 回答日時:
> 正しく入力されたかどうかの確認をしたいのですが
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で、受け取って、処理も出来ます。
ちなみにの、独自のフォーマットも良いのですが。
一般的なフォーマットを利用すると、後々
便利なような気がします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- 英語 提示した名言の文の構造について(waste one hour of time) 5 2023/05/20 15:22
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(趣味・アウトドア・車) アマチュア無線家の方にお伺いします。 今般、Turbo HAMLOGを使い始めました。 入力する際に 1 2022/11/03 19:19
- 英語 The waiting time between stages is in the order of 2 2023/05/14 09:08
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- 英語 The waiting time between stages is in the order of 5 2023/05/09 18:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
タトゥーや墨を入れる人の共通点
-
連続する「\\」をひとつの「\\...
-
VB.Net Object型 空かどうか
-
nullで、return出来るのはどん...
-
例外ってIf文の中に入れますか...
-
String型の日付(2005/11/25)の...
-
例外の可能性は、MSDNライブラ...
-
java 文字列の部分一致について
-
数値と文字列の見分け方
-
文字列からダブルクオートの削除
-
Timestamp型への変換について(J...
-
時間の取得
-
サーブレットからJSPの呼び出し...
-
WMIスクリプトを使用してMACア...
-
strutsで例外発生
-
オーバーライドしたメソッドで...
-
JAVA 日付チェック方法 年・...
-
VBA Evaluate関数 型が一致しま...
-
WebClient()以外でネットにアク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
時間の取得
-
VB.Net Object型 空かどうか
-
連続する「\\」をひとつの「\\...
-
数字か文字列かを判定する関数
-
String型の日付(2005/11/25)の...
-
VBA Evaluate関数 型が一致しま...
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
文字列が数字のみで構成されて...
-
Timestamp型への変換について(J...
-
例外ってIf文の中に入れますか...
-
全角スペースのチェックについて
-
ファイルダイアログを開いた時...
-
C# マルチスレッドにおける例外...
-
VBA 400エラー 1004エラー
-
nullで、return出来るのはどん...
-
C#の捕捉されない例外処理の対...
-
C# UriFormatExceptionの回避
おすすめ情報