以前の質問に目を通しましたが、探している答えがありませんでした。 StopWatchメソッドからミリ秒を分と秒に変換するにはどうすればよいですか?私は持っています:
watch.start();
ストップウォッチを開始し、
watch.stop();
時計を停止します。あとで
watch.getTime();
ミリ秒を返します。秒と分で返してほしい。これを行うにはどうすればよいですか? 1000で乗算/除算せずにそれを行う方法を探していますが、むしろ計算全体を読みやすく、エラーを起こしにくい方法を探しています
TimeUnit
を使用することをお勧めします。次のように使用できます。
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
ミリ秒を(1000で割って)秒に変換した後、/ 60
を使用して分値を取得し、% 60
(剰余)を使用して「秒単位の秒」値を取得できます。
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (int)((millis / 1000) % 60);
これは単なる基本的な数学です。 1000ミリ秒= 1秒、60000ミリ秒= 1分。それで
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
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では、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.の間で変更されました。 この質問 を参照してください。
Clock
の実装は、ミリ秒の解像度に制限されています。したがって、値はナノ秒単位でstoreできますが、ミリ秒単位でのみcaptureできます。完全なプログラムはこちら
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 "そこで、詳細に説明します。
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;
}
Xミリ秒= X/1000秒=(X/1000)/ 60分
100,000ミリ秒がある場合、この値を1,000で除算すると、100秒が残ります。 100/60 = 1.666〜分ですが、分数の分には値がないため、100%60 = 40秒で残りを見つけ、整数除算100/60 = 1分、残り40秒です。回答:1分40秒。
時計に表示される実際の時間、分、秒を取得するには、このコードを試してください
val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
この方法で試してみることができます:
から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"
}
Java 1.5は同時TimeUnitをサポートするとは思わない。そうでなければ、TimeUnitをお勧めします。以下は純粋な数学アプローチに基づいています。
stopWatch.stop();
long milliseconds = stopWatch.getTime();
int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
ミリ秒単位の時間を直接分に変換するには:これを使用できる2番目の形式
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
これにより、適切なフォーマットで文字列が時間とともに返されます。それは私のために働いた。
これが簡単な解決策です。任意のメソッドで使用できる呼び出しの例:
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");
}
}
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();
}
}