90

以前の質問に目を通しましたが、私が探していた答えはありませんでした。StopWatch メソッドからミリ秒を分と秒に変換するにはどうすればよいですか? 私は持っている:

 watch.start();

ストップウォッチを開始し、

  watch.stop();

時計を止める。私は後で持っています

  watch.getTime();

ミリ秒を返します。秒と分で返してほしい。どうすればそうすることができますか?1000 で乗算/除算せずにそれを行う方法を探していますが、計算全体をより読みやすく、エラーを起こしにくくする方法を探しています。

4

19 に答える 19

209

を使用することをお勧めしTimeUnitます。次のように使用できます。

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
于 2013-07-12T22:59:58.840 に答える
58

ミリ秒を (1000 で割って) 秒に変換した後、 を使用/ 60して分の値を取得し、% 60(余り) を使用して「秒単位の分」の値を取得できます。

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);
于 2013-07-12T21:41:44.457 に答える
12

これは単なる基本的な数学です。1000 ミリ秒 = 1 秒、60000 ミリ秒 = 1 分。だからただやって、

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;
于 2013-07-12T21:51:46.687 に答える
8
  public static String getIntervalTime(long longInterval) {
    
    long intMillis = longInterval;
    long dd = TimeUnit.MILLISECONDS.toDays(intMillis);
    long daysMillis = TimeUnit.DAYS.toMillis(dd);
    intMillis -= daysMillis;
    long hh = TimeUnit.MILLISECONDS.toHours(intMillis);
    long hoursMillis = TimeUnit.HOURS.toMillis(hh);
    intMillis -= hoursMillis;
    long mm = TimeUnit.MILLISECONDS.toMinutes(intMillis);
    long minutesMillis = TimeUnit.MINUTES.toMillis(mm);
    intMillis -= minutesMillis;
    long ss = TimeUnit.MILLISECONDS.toSeconds(intMillis);
    long secondsMillis = TimeUnit.SECONDS.toMillis(ss);
    intMillis -= secondsMillis;

    String stringInterval = "%02d days - %02d:%02d:%02d.%03d";
    return String.format(stringInterval , dd, hh, mm, ss, intMillis);
  }

ショートフォーム!

  public static String getIntervalTime(long longInterval) {

    long intMillis = longInterval;
    long dd = TimeUnit.MILLISECONDS.toDays(intMillis);
    intMillis -= TimeUnit.DAYS.toMillis(dd);
    long hh = TimeUnit.MILLISECONDS.toHours(intMillis);
    intMillis -= TimeUnit.HOURS.toMillis(hh);
    long mm = TimeUnit.MILLISECONDS.toMinutes(intMillis);
    intMillis -= TimeUnit.MINUTES.toMillis(mm);
    long ss = TimeUnit.MILLISECONDS.toSeconds(intMillis);
    intMillis -= TimeUnit.SECONDS.toMillis(ss);

    String stringInterval = "%02d days - %02d:%02d:%02d.%03d";
    return String.format(stringInterval , dd, hh, mm, ss, intMillis);
  }

テスト

long delay = 1000*60*20 + 1000*5 + 10;
LOGGER.log(Level.INFO, "Delay Expected {0}", getIntervalTime(delay));

出力

INFO: Delay Expected 00 days - 00:20:05.010
于 2020-04-26T23:16:52.287 に答える
6

X ミリ秒 = X / 1000 秒 = (X / 1000) / 60 分

100,000 ミリ秒がある場合、この値を 1,000 で割ると、100 秒が残ります。100 / 60 = 1.666~ 分ですが、小数分には値がないため、100 % 60 = 40 秒を実行して余りを見つけてから、整数除算 100 / 60 = 1 分、残り 40 秒を求めます。答え: 1 分 40 秒です。

于 2013-07-12T21:34:44.407 に答える
5

時計に表示される実際の時、分、秒を取得するには、このコードを試してください

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
于 2018-08-22T11:26:18.860 に答える
5

この方法で進めることができます:

ms値を渡す

Long ms = watch.getTime();

getDisplayValue(ms)

コトリンの実装:

fun getDisplayValue(ms: Long): String {
        val duration = Duration.ofMillis(ms)
        val minutes = duration.toMinutes()
        val seconds = duration.minusMinutes(minutes).seconds

        return "${minutes}min ${seconds}sec"
}

Java 実装:

public String getDisplayValue(Long ms) {
        Duration duration = Duration.ofMillis(ms);
        Long minutes = duration.toMinutes();
        Long seconds = duration.minusMinutes(minutes).getSeconds();

        return minutes + "min " + seconds "sec"
}
于 2018-11-14T11:23:29.537 に答える
3

Java 1.5 が並行 TimeUnit をサポートしているとは思わない。それ以外の場合は、TimeUnit をお勧めします。以下は、純粋な数学のアプローチに基づいています。

stopWatch.stop();
long milliseconds = stopWatch.getTime();

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
于 2016-01-28T17:57:37.320 に答える
0

Apache Commons Lang クラスDurationFormatUtils. このクラスには、すぐに使用できるいくつかの標準形式がありますが、カスタム形式もサポートしています。

String result = DurationFormatUtils.formatDuration(millis, "mm:ss.SSS' sec.'");
于 2021-08-23T14:38:17.873 に答える