2012-04-10 9 views
3

まず:-(比較時間すべての

私の英語を許して、私は、javaの時間に問題があるのは、一例で、それを見てみましょう:。

DateFormat datos = new SimpleDateFormat ("hh:mm:ss"); 
     Date ac, lim; 
     String actual,limit; 
     actual="18:01:23"; 
     limit="00:16:23"; 

     ac=datos.parse(actual); 
     lim=datos.parse(limit); 


     if(ac.compareTo(lim)==-1){....... 

私はこの事件を解決する必要があります実際の時間は限界に達しており、この例ではまだ終了するまでに6時間しかかからないと言います。

DateFormatで解決しようとしました。しかし、それはこのケースを見ません。私はTimeクラスでもそれを試しましたが、そのmetho dsは推奨されていません。

どうすればこの問題を解決できますか?あなたのSimpleDateFormat

+0

、それは実際に制限した後と考えられているのが普通です...あなたが望むことを達成する唯一の方法は、実際の日の後の翌日であることを指定することです(デフォルトでは、それは同じ日であるとみなされます) – Vinze

+0

ok ...だから私はそれを変更してDateクラスを使用します。私はそれが時の番号23を0に渡す場合、タイムリミットを計算するとき1日を追加します。それは正しいでしょう。ありがとうございました – user1297810

答えて

12

利用HH代わりのhh

DateFormat datos = new SimpleDateFormat("HH:mm:ss"); 

hhは12時間制(時間は1から12に行く)です。

HHは、24時間制です(時間は0から23までです)。

しかし、それ以外にもこれには間違ったことがあります。クラスDateは、あまり時間がかかりません。これを行うと、指定された時刻の01-01-1970として解析されます。したがって18:01:23は01-01-1970、18:01:23、00:16:23は01-01-1970,00:16:23になります。次の日は18:01:23から00:16:23までを比較したかったでしょう。

このような何かを試してみてください:

String actual = "18:01:23"; 
String limit = "00:16:23"; 

String[] parts = actual.split(":"); 
Calendar cal1 = Calendar.getInstance(); 
cal1.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0])); 
cal1.set(Calendar.MINUTE, Integer.parseInt(parts[1])); 
cal1.set(Calendar.SECOND, Integer.parseInt(parts[2])); 

parts = limit.split(":"); 
Calendar cal2 = Calendar.getInstance(); 
cal2.set(Calendar.HOUR_OF_DAY, Integer.parseInt(parts[0])); 
cal2.set(Calendar.MINUTE, Integer.parseInt(parts[1])); 
cal2.set(Calendar.SECOND, Integer.parseInt(parts[2])); 

// Add 1 day because you mean 00:16:23 the next day 
cal2.add(Calendar.DATE, 1); 

if (cal1.before(cal2)) { 
    System.out.println("Not yet at the limit"); 
} 

ライブラリJoda Timeは、Javaの日付とはるかに優れた標準的なJavaの日付とカレンダーAPIよりも設計されていた時間ライブラリに人気があります。 Javaで日付と時刻を処理する必要がある場合には、それを使用することを検討してください。迅速かつ汚いソリューションとして

String actual = "18:01:23"; 
String limit = "00:16:23"; 

DateTimeFormatter df = DateTimeFormat.forPattern("HH:mm:ss"); 

DateTime ac = df.parseLocalTime(actual).toDateTimeToday(); 
DateTime lim = df.parseLocalTime(limit).toDateTimeToday().plusDays(1); 

if (ac.isBefore(lim)) { 
    System.out.println("Not yet at the limit"); 
} 
0

:あなたがこれを行うことがジョダ時間とともに

あなたが一日を指定しない場合

final DateFormat datos = new SimpleDateFormat("HH:mm:ss"); 
    Date ac; 
    final Date lim = new Date(); 
    String actual, limit; 
    actual = "18:01:23"; 
    limit = "00:16:23"; 

    try { 
     ac = datos.parse(actual); 
     lim.setTime(ac.getTime() + TimeUnit.MINUTES.toMillis(16) + TimeUnit.SECONDS.toMillis(23)); 
     if (ac.before(lim)) { 
      // TODO 
     } 
    } catch (final ParseException e) { 
     e.printStackTrace(); 
    }