web-dev-qa-db-ja.com

Android Java:2回引く方法は?

私は自分のプロジェクトである種のストップウォッチを使用していますが、

start time ex: 18:40:10 h
stop time  ex: 19:05:15 h

final time = stop - startのような2つの値からの結果が必要です

私はいくつかの例を見つけましたが、それらはすべて非常に混乱しています。

簡単な解決策はありますか?

13
Nezir

文字列がある場合は、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で割って、秒の小数部分を取得できます。

30
John

Java.util.Date を使用していると仮定します:

long totalTime = endDate.getTime() - startDate.getTime();

結果は、ミリ秒単位の合計時間になります。

13

今日、新しいJava(わからない、これが機能するAndroidバージョン)):

Instant before = Instant.now();
// do stuff

Duration.between(before, Instant.now()).getSeconds()

不器用なJava昔からの方法はなくなりました。

0
Frischling

私は現代的な答えを提供しています。

Java.timeとThreeTenABP

    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年の良い回答でした。今日はクラスDateFormatSimpleDateFormatDateを避けてください。最新のJava date and time APIであるJava.timeは、操作が非常に優れています。

しかし、APIレベル26は必要ありませんか?

いいえ、Java.timeの使用は、古いデバイスと新しいAndroidデバイスでうまく機能します。少なくともJava 6が必要です。

  • Java 8以降およびそれ以降のAndroidデバイス(APIレベル26から))には、最新のAPIが組み込まれています。
  • Android以外の場合Java 6および7は、最新のクラスのバックポートであるThreeTenバックポートを取得します(JSR 310の場合はThreeTen。下部のリンクを参照)。
  • (古い)Android ThreeTenBackportのAndroidエディションを使用します。ThreeTenABPと呼ばれます。また、サブパッケージを使用してorg.threeten.bpから日付と時刻のクラスをインポートしてください。

リンク

0
Ole V.V.

この答えを試してみてくださいそれはあなたに大いに役立ちます

から ここ

この答えでは、日と月と年を破棄して2倍に減算することがわかります。

2番目の時間値に達するまでに費やす分数が表示されます。

0
Momen Ali