2017-11-30 5 views
-4

"hh:mm:ss"という形式の2つの文字列があります。両方の文字列の時間部分のみを取得し、私はそれを行う必要があります。私はDateformatと解析関数を試してみましたが、私が減算すると、悪いオペランドの型を示します。 コード:java.timeを使用して"hh:mm:ss"タイプの文字列からJava時間を取得

String ta=""; 
String tb=""; 
int diff; 
Scanner s=new Scanner(System.in); 
ta=s.nextLine(); 
tb=s.nextLine(); 
DateFormat sdf = new SimpleDateFormat("hh"); 
Date date1 = sdf.parse(ta); 
Date date2 = sdf.parse(tb); 
diff=sdf.format(date1)-sdf.format(date2); 
if(diff==20) 
    System.out.println("Twenty"); 
+2

コードを修正するには、質問を編集する必要があります。コードを入力すると、エラーが発生したコードが含まれています。あなたのコード( "私はDateformatを試しました")を記述することは役に立ちません。 – azurefrog

+0

質問を投稿する前に回答を検索する必要があります...この質問をご覧ください:https://stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances – Gomes

+0

入力は期間(24時間を超える可能性のある時間を意味する)または時計の時間? –

答えて

3

あなたはおそらく全くDateに変換する必要がありません。

String time1 = "07:00:55"; 
String time2 = "05:00:33"; 
String time1Sub = time1.substring(0, time1.indexOf(':')); 
String time2Sub = time2.substring(0, time2.indexOf(':')); 
System.out.println(Integer.parseInt(time1Sub) - Integer.parseInt(time2Sub)); 

を編集:

下記のコメントごとに、ご希望の場合完全時間の場合は、時間単位の違いを確認できます(これを行うより良い方法があれば自由に編集できます)。

String hour1 = time1.substring(time1.lastIndexOf(':') - 2, time1.lastIndexOf(':')); 
String hour2 = time2.substring(time1.lastIndexOf(':') - 2, time2.lastIndexOf(':')); 
int result = Integer.parseInt(time1Sub) - Integer.parseInt(time2Sub); 
System.out.println(Integer.parseInt(hour1) < Integer.parseInt(hour2) ? result - 1 : result); 
+0

私です。なぜこれが投票されたのか分からない。それは妥当と思われる。 –

+0

はい、これは、ローカル時間で入力を解析するために提案された選択肢よりも単純で簡単であり、さらに優れています。この答えは時間値> = 24を処理できるためです(この場合、入力は時間でありクロック時間ではありません)。しかしながら、第1の入力のサブ部分が比較される第2の入力のサブ部分より大きい場合、時間デルタはおそらく1だけ減少されるべきである。 –

+0

@MenoHochschildは、*フル*時間のオプション編集を追加しました。 – rememberthetitans

0

public static void main(String[] args) { 

    java.time.LocalTime a = java.time.LocalTime.parse("12:00:00"); 
    System.out.println(a.getHour()); 

} 
+0

OPはこう言っています: "24:59:59"のような入力が予想されるかもしれないので、あなたの答えはこの場合にはうまくいかないでしょう。 –

関連する問題