web-dev-qa-db-ja.com

ミリ秒を分と秒に変換しますか?

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

 watch.start();

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

  watch.stop();

時計を停止します。あとで

  watch.getTime();

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

63
Trevor

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

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
151
Avi

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

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);
33
Itay Maman

これは単なる基本的な数学です。 1000ミリ秒= 1秒、60000ミリ秒= 1分。それで

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;
9
Dulanga

tl; dr

Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;

Java 9以降

Java 9以降では、Durationを作成し、to…Partメソッドを呼び出します。この場合:toMinutesPartおよびtoSecondsPart

ストップウォッチの開始と停止をキャプチャします。

Instant start = Instant.now(); 
…
Instant stop = Instant.now();

Durationオブジェクトで経過時間を表します。

Duration d = Duration.between( start , stop );

各部分、分、秒について質問します。

int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();

ストップウォッチが予想より長く実行されたかどうかを確認することもできます。

Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;

Java 8

Java 8では、Durationクラスにto…Partメソッドがありません。他の回答に示されているように、数学を行う必要があります。

long entireDurationAsSeconds = d.getSeconds();

または、Durationに計算させます。

long minutesPart = d.toMinutes(); 
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;

IdeOne.comのライブコード を参照してください。

間隔:2016-12-18T08:39:34.099Z/2016-12-18T08:41:49.099Z

d.toString():PT2M15S

d.getSeconds():135

経過:2M 15S

解決

参考までに、nowメソッドの解像度はJava 8とJava 9.の間で変更されました。 この質問 を参照してください。

  • Java 9は、ナノ秒単位の解像度で瞬間をキャプチャします。解像度は、コンピューターのハードウェアの能力に依存します。 macOS Sierraを搭載したMacBook Pro Retinaでマイクロ秒(小数の6桁)が表示されます。
  • Java 8は、ミリ秒までの瞬間のみをキャプチャします。 Clock の実装は、ミリ秒の解像度に制限されています。したがって、値はナノ秒単位でstoreできますが、ミリ秒単位でのみcaptureできます。
9
Basil Bourque

完全なプログラムはこちら

import Java.util.concurrent.TimeUnit;

public class Milliseconds {

public static void main(String[] args) {
    long milliseconds = 1000000;

    // long minutes = (milliseconds / 1000) / 60;
    long minutes = TimeUnit.MILLISECONDS.toMinutes(milliseconds);

    // long seconds = (milliseconds / 1000);
    long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds);

    System.out.format("%d Milliseconds = %d minutes\n", milliseconds, minutes );
    System.out.println("Or");
    System.out.format("%d Milliseconds = %d seconds", milliseconds, seconds );

}
}

ここでこのプログラムを見つけました " Link "そこで、詳細に説明します。

6
Ashish Yadav

Android用のmp3プレーヤーアプリを作成していたので、このようにして現在の時間と期間を取得しました

 private String millisecondsToTime(long milliseconds) {
    long minutes = (milliseconds / 1000) / 60;
    long seconds = (milliseconds / 1000) % 60;
    String secondsStr = Long.toString(seconds);
    String secs;
    if (secondsStr.length() >= 2) {
        secs = secondsStr.substring(0, 2);
    } else {
        secs = "0" + secondsStr;
    }

    return minutes + ":" + secs;
}
5
Jeeva

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

100,000ミリ秒がある場合、この値を1,000で除算すると、100秒が残ります。 100/60 = 1.666〜分ですが、分数の分には値がないため、100%60 = 40秒で残りを見つけ、整数除算100/60 = 1分、残り40秒です。回答:1分40秒。

4
Kon

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

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
3
Harpreet Singh

この方法で試してみることができます:

からms値を渡す

Long ms = watch.getTime();

getDisplayValue(ms)

Kotlinの実装:

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"
}
3
Irwin Nawrocki

Java 1.5は同時TimeUnitをサポートするとは思わない。そうでなければ、TimeUnitをお勧めします。以下は純粋な数学アプローチに基づいています。

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

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
3
Mikey

ミリ秒単位の時間を直接分に変換するには:これを使用できる2番目の形式

String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));

これにより、適切なフォーマットで文字列が時間とともに返されます。それは私のために働いた。

2

これが簡単な解決策です。任意のメソッドで使用できる呼び出しの例:

  • StopWatch.start();
  • StopWatch.stop();
  • StopWatch.displayDiff();は、開始と停止の差を分と秒で表示します。 (経過時間)

    import Java.time.Duration;
    import Java.time.Instant;
    
    
    public class StopWatch {
    
        private static Instant start;
        private static Instant stop;
    
        private void StopWatch() {
            // not called
        }
    
        public static void start() {
            start = Instant.now();
        }
    
        public static void stop() {
            stop = Instant.now();
        }
    
        public static void displayDiff() {
            Duration totalTime = Duration.between(start, stop);
            System.out.println(totalTime.toMinutes() + " Minutes " 
                               + totalTime.toMillis() / 1000 + " Seconds");
        }
    }
    
0
R.Lansing
package com.v3mobi.userpersistdatetime;

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.util.Log;
import Android.widget.Toast;

import Java.util.Date;
import Java.util.concurrent.TimeUnit;

public class UserActivity extends AppCompatActivity {

    Date startDate;
    Date endDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user);
        startDate = Java.util.Calendar.getInstance().getTime(); //set your start time
    }

    @Override
    protected void onStop() {
        super.onStop();
        endDate = Java.util.Calendar.getInstance().getTime(); // set  your end time

        chekUserPersistence();

    }

    private void chekUserPersistence()
    {
        long duration = endDate.getTime() - startDate.getTime();
//        long duration = 301000;

        long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);         // minutes ok
        long secs = (duration/1000) % 60;         // minutes ok


        Toast.makeText(UserActivity.this, "Diff  "
                +  diffInMinutes + " : "+ secs , Toast.LENGTH_SHORT).show();

        System.out.println("Diff  " + diffInMinutes +" : "+ secs );

        Log.e("keshav","diffInMinutes -->" +diffInMinutes);
        Log.e("keshav","secs -->" +secs);
        finish();
    }
}
0
Keshav Gera