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


83

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

 watch.start();

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

  watch.stop();

時計を停止します。私は後で持っています

  watch.getTime();

ミリ秒を返します。秒と分で返してほしい。どうすればそうできますか?1000を掛けたり割ったりせずにそれを行う方法を探していますが、計算全体を読みやすくし、エラーが発生しにくい方法を探しています。


xミリ秒= x / 1000秒。次に、z秒= z / 60分。z%60を実行して、残りの秒数を見つけることができます。
Kon

4
基本的な計算:1000ミリ秒= 1秒。60秒= 1分。
マークB

1
この投稿を確認してください:stackoverflow.com/questions/625433/…。あなたが望むものを手に入れるべきです。
bmac151 2013

1
これは実際には本当に簡単な質問です。何を試しましたか?
モニカの復活-notmaynard 2013

回答:


192

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

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

私の唯一の問題は、私が知らないことです:ミリを定義する方法(「ミリは変数に解決できません」として返され、System.out.println();メソッドでアクセスする方法がわかりません。

ミリ秒がすでに長いようなものである場合は、数値だけを使用してこれを行うことができます。簡単な計算を行うためだけに、新しいライブラリを導入する必要はほとんどありません。minutes = ((milliseconds / 1000) / 60)
カイルファルコナー

2
これは、7を介してJava 5のための最良の答えのようだ
ショーンBARBEAU

7
@ソッティブリリアント?これは質問に対処していません!質問は、ストップウォッチの読み取り値として分秒を要求し1 minute 30 secondsます。たとえば、この回答は分または秒を提供します1 minute 90 seconds
バジルバーク2017年

1
私はそれを使いたいのですが、秒はintではなくdoubleとして、たとえば1.5秒です。これはいつか可能ですか?

49

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

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


25

tl; dr

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

Java9以降

Java 9以降では、を作成しDurationto…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参考までに、メソッドの解像度はJava8とJava9の間で変更されました。この質問を参照してください。

  • Java 9は、ナノ秒という細かい解像度で瞬間をキャプチャします。解像度は、コンピューターのハードウェアの機能によって異なります。macOSSierraを搭載したMacBookPro Retinaでマイクロ秒(小数点以下6桁)が表示されます。
  • Java 8は、ミリ秒までの瞬間をキャプチャします。の実装はClock、ミリ秒の解像度に制限されています。だからあなたはできる値をナノ秒単位で保存ますが、キャプチャするのはミリ秒単位のみです。

java.timeについて

java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは、、などの厄介な古いレガシー日時クラスに取って代わりますjava.util.DateCalendar、& SimpleDateFormat

詳細については、Oracleチュートリアルを参照してください。。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。

ジョダタイム今ではプロジェクト、メンテナンスモードへの移行をアドバイスjava.timeのクラス。

java.timeオブジェクトをデータベースと直接交換できます。に準拠したJDBCドライバーを使用するJDBC4.2以降に。文字列もjava.sql.*クラスも必要ありません。

java.timeクラスはどこで入手できますか?

どのバージョンのJavaまたはAndroidで使用するjava.timeライブラリの表


アンドロイドコールのためのAPIレベル26が必要です
キラー

@Killer以前のAndroidについては、ThreeTen-BackportおよびThreeTenABPプロジェクトを参照してください。
バジルバーク2017

12

これは単なる基本的な数学です。1000ミリ秒= 1秒および60000ミリ秒= 1分。だから、

int seconds=(millis/1000)%60;

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

16
間違いがあります(millis/1000-seconds)/60
-2

10

私は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;
}

7

これが完全なプログラムです

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 );

}
}

このプログラムはここ「リンク」で見つけました。詳しく説明されています。


1
これは質問に対応していませ。質問は、ストップウォッチの読み出しとして、分秒を要求します。次の2つの別々の結果、分与えるseconds.d
バジルボーク

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秒。


5

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

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

これにより、適切な形式で時間のある文字列が返されます。それは私のために働いた。


ああ、いいね!ミリ秒単位のタイマーでテストして動作しました。
esQmo_

5

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

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

5

次のように進めてみてください。

から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"
}

5
  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);
  }

テスト

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

3

Java1.5は同時TimeUnitをサポートしていないと思います。それ以外の場合は、TimeUnitをお勧めします。以下は純粋数学のアプローチに基づいています。

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

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

1

ミリ秒を秒、分、時間に簡単に変換できます。

                val millis = **milliSecondsYouWantToConvert**
                val seconds = (millis / 1000) % 60
                val minutes = ((millis / 1000) / 60) % 60
                val hours = ((millis / 1000) / 60) / 60

                println("--------------------------------------------------------------------")
                println(String.format("%02dh : %02dm : %02ds remaining", hours, minutes, seconds))
                println("--------------------------------------------------------------------")
**RESULT :** 
--------------------------------------------------------------------
  01h : 23m : 37s remaining
--------------------------------------------------------------------


1

以下のコードは、[m:ss]形式でmsをmin:secsに変換するための作業を行います

int seconds;
int minutes;
String Sec;
long Mills = ...;  // Milliseconds goes here
minutes = (int)(Mills / 1000)  / 60;
seconds = (int)((Mills / 1000) % 60);
Sec = seconds+"";

TextView.setText(minutes+":"+Sec);//Display duration [3:40]

0
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();
    }
}

-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");
        }
    }
    

1
不正解です。このtoMillisメソッドは、期間全体をミリ秒単位で報告します。
バジルバーク2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.