• ベストアンサー
  • すぐに回答を!

時間を表す文字列を時刻に変換

  • 質問No.5620875
  • 閲覧数956
  • ありがとう数0
  • 回答数3

お礼率 77% (64/83)

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
  • ベストアンサー

ベストアンサー率 54% (1660/3060)

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件)

  • 回答No.3

ベストアンサー率 35% (1453/4147)

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

もう一手間必要よ。

setLenient(false)
を使う必要があるわ。
  • 回答No.2

ベストアンサー率 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で、受け取って、処理も出来ます。

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

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ