私は自分のプロジェクトである種のストップウォッチを使用していますが、
start time ex: 18:40:10 h
stop time ex: 19:05:15 h
final time = stop - start
のような2つの値からの結果が必要です
私はいくつかの例を見つけましたが、それらはすべて非常に混乱しています。
簡単な解決策はありますか?
文字列がある場合は、Java.text.SimpleDateFormatを使用してそれらをJava.util.Dateに解析する必要があります。何かのようなもの:
Java.text.DateFormat df = new Java.text.SimpleDateFormat("hh:mm:ss");
Java.util.Date date1 = df.parse("18:40:10");
Java.util.Date date2 = df.parse("19:05:15");
long diff = date2.getTime() - date1.getTime();
ここで、diffは18:40:10から19:05:15までの間に経過したミリ秒数です。
編集1:
このための方法をオンラインで見つけました( http://www.javaworld.com/javaworld/jw-03-2001/jw-0330-time.html?page=2 ):
int timeInSeconds = diff / 1000;
int hours, minutes, seconds;
hours = timeInSeconds / 3600;
timeInSeconds = timeInSeconds - (hours * 3600);
minutes = timeInSeconds / 60;
timeInSeconds = timeInSeconds - (minutes * 60);
seconds = timeInSeconds;
編集2:
文字列として使用したい場合(これはずさんな方法ですが、機能します):
String diffTime = (hours<10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds) + " h";
編集3:
ミリ秒が必要な場合は、これを実行してください
long timeMS = diff % 1000;
次に、それを1000で割って、秒の小数部分を取得できます。
Java.util.Date を使用していると仮定します:
long totalTime = endDate.getTime() - startDate.getTime();
結果は、ミリ秒単位の合計時間になります。
今日、新しいJava(わからない、これが機能するAndroidバージョン)):
Instant before = Instant.now();
// do stuff
Duration.between(before, Instant.now()).getSeconds()
不器用なJava昔からの方法はなくなりました。
私は現代的な答えを提供しています。
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("H:mm:ss 'h'");
String startTimeString = "18:40:10 h";
String stopTimeString = "19:05:15 h";
LocalTime startTime = LocalTime.parse(startTimeString, timeFormatter);
LocalTime stopTime = LocalTime.parse(stopTimeString, timeFormatter);
if (stopTime.isBefore(startTime)) {
System.out.println("Stop time must not be before start time");
} else {
Duration difference = Duration.between(startTime, stopTime);
long hours = difference.toHours();
difference = difference.minusHours(hours);
long minutes = difference.toMinutes();
difference = difference.minusMinutes(minutes);
long seconds = difference.getSeconds();
System.out.format("%d hours %d minutes %d seconds%n", hours, minutes, seconds);
}
この例からの出力は次のとおりです。
0時間25分5秒
他の回答は2010年の良い回答でした。今日はクラスDateFormat
、SimpleDateFormat
、Date
を避けてください。最新のJava date and time APIであるJava.timeは、操作が非常に優れています。
いいえ、Java.timeの使用は、古いデバイスと新しいAndroidデバイスでうまく機能します。少なくともJava 6が必要です。
org.threeten.bp
から日付と時刻のクラスをインポートしてください。Java.time
が最初に記述されました。Java.time
からJava 6および7(JSR-310の場合はThreeTen)へのバックポート。