2017-04-24 13 views
1

私は2つの時間値の時間差を取得しようとしています。 (11:00:00と12:43:00)、正しい出力を示しています。入力値に対するJavaを使用した2つの時間の時差

**

Time in seconds: 6180 seconds. 
Time in minutes: 103 minutes. 
Time in hours: 1 hours. 
Time in hours Round : 2 hours. 

** ( "11時○○分00秒" と "2時43分00秒")は、ラウンド値 として3時間に私たちにを与える必要があります**

Time in seconds: -29820 seconds. 
Time in minutes: -497 minutes. 
Time in hours: -8 hours. 
Time in hours Round : -8 hours. 

**

import java.lang.Math; 
import java.text.SimpleDateFormat; 
import java.util.Date; 


public class HelloWorld 
{ 
    public static void main(String[] args) 
    { 


String dateStart = "11:00:00"; 
String dateStop = "12:43:00"; 
// Custom date format 
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 
Date d1 = null; 
Date d2 = null; 
try { 
    d1 = format.parse(dateStart); 
    d2 = format.parse(dateStop); 
} catch (Exception e) { 
    e.printStackTrace(); 
}  

// Get msec from each, and subtract. 
long diff = d2.getTime() - d1.getTime(); 
long diffSeconds = diff/1000;   
long diffMinutes = diff/(60 * 1000);   
long diffHours = diff/(60 * 60 * 1000);    
int parkingEntry=2; 
int firstHour=3; 
int parkingRate=4; 
int Total=0; 

System.out.println("Time in seconds: " + diffSeconds + " seconds.");   
System.out.println("Time in minutes: " + diffMinutes + " minutes.");   
System.out.println("Time in hours: " + diffHours + " hours."); 

double my_hrs=diffMinutes/60d; 
    int r = (int) Math.round(my_hrs); 
System.out.println("Time in hours Round : " + r + " hours."); 


    } 
} 
+0

長いdiffInMillis = d2.getTimeInMillis()を使用してみてください - d1.getTimeInMillis() –

+5

[ 'Duration']を使用してみてください( https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html)および['LocalTime'](https://docs.oracle.com/javase/8/docs/api) /java/time/LocalTime.html) – MadProgrammer

+0

@ user7790438、それはコンパイルされません(もしそうであれば、質問者の問題に役立たないでしょう)。あなたは 'Calendar'クラスのメソッドと混乱しています。 'Date'と' Calendar'の間の不一致は、 'LocalTime'と' Duration'(MadProgrammerが示唆しているように)に変更したときに大きく克服される事の一つに過ぎません。 –

答えて

1

フォーマット「H H:mm:ss "は24時間形式です。したがって、 "11:00:00"と "2:43:00"の時差を確認するときは、実際には午前11時から午前2時43分の時間差をチェックしています。

入力を「11:00:00」と「14:43:00」に変更します。

+0

はい、私はこの入力の日付形式をどのように隠すことができるのか理解できますか? – user885791

+0

http:// stackoverflow。com/questions/6907968/how-to-convert-24-hr-format-time-in-12-hr-format、http://stackoverflow.com/questions/6531632/conversion-from-12-hours- time-to-24-hours-in-javaをサポートしています。次回は質問を明確に指定してください。 – Ray

+0

その他のオプションがあります:入力文字列にam/pmマーカーを追加し、そのフォーマットで 'hh'を使います。または、2番目の時刻が最初の時刻よりも前に表示されている場合は、12時間を追加します(もう一度、これは 'LocalDate'または' Duration'で簡単です)。 –

0

あなたの基本的な問題は、あなたの入力が違いを計算するには不十分であるということです。あなたは時が昼前か午後か(AMかPMか)わからない。最善の解決策は、この情報を入力に必要とすることです。 24時間(あなたの書式のHHが示唆しているように)を使用するか、入力にAM/PMマーカーを追加してください。

あなたが入力を変更できないとすれば、もちろんあなたが持っているものに最善を尽くしているかもしれません。停止時間が開始時間より前のように見える場合は、開始時間がAMと停止時間PMだったからでしょう。これは防弾対策にはほど遠いことに注意してください.6時間から7時間は1時間と計算されますが、午前6時から午後7時、つまり13時間となっている可能性があります。

私はjava.timeクラスでそれを行う方法を示すために、この機会を利用します:

// Two formats, for AM and PM 
    final String basicTimeFormatPattern = "h:mm:ss"; 
    DateTimeFormatter amFormat = new DateTimeFormatterBuilder().appendPattern(basicTimeFormatPattern) 
      .parseDefaulting(ChronoField.AMPM_OF_DAY, 0) 
      .toFormatter(); 
    DateTimeFormatter pmFormat = new DateTimeFormatterBuilder().appendPattern(basicTimeFormatPattern) 
      .parseDefaulting(ChronoField.AMPM_OF_DAY, 1) 
      .toFormatter(); 
    LocalTime t1 = LocalTime.parse(dateStart, amFormat); 
    LocalTime t2 = LocalTime.parse(dateStop, amFormat); 
    if (t2.isBefore(t1)) { 
     // parse in PM instead 
     t2 = LocalTime.parse(dateStop, pmFormat); 
    } 
    Duration diff = Duration.between(t1, t2); 
    System.out.println("Time in seconds: " + diff.getSeconds() + " seconds.");   
    long diffMinutes = diff.toMinutes(); 
    System.out.println("Time in minutes: " + diffMinutes + " minutes.");   
    System.out.println("Time in hours: " + diff.toHours() + " hours."); 

コードは、あなたと同じ大きさですが、コードの行が困難な部分に費やされていることに注意してください不完全な入力を解析してAMとPMを決定するのに対し、時間単位間の些細な変換はライブラリメソッドによって行われ、独自のコードを補完しません。丸められた時間の計算は、あなたのコードのように質問で行うことができるので、私はそれを残しました。

上記プリント:

Time in seconds: 6180 seconds. 
Time in minutes: 103 minutes. 
Time in hours: 1 hours. 
Time in hours Round : 2 hours. 

またはdateStop = "2:43:00"有する:

Time in seconds: 13380 seconds. 
Time in minutes: 223 minutes. 
Time in hours: 3 hours. 
Time in hours Round : 4 hours. 
関連する問題