毫秒转换为分钟和秒?

我已经看过以前的问题,但没有人有我正在寻找的答案。 如何将StopWatch方法中的毫秒转换为分钟和秒钟? 我有:

watch.start(); 

开始秒表和

  watch.stop(); 

停止手表。 我后来有

  watch.getTime(); 

它返回毫秒。 我希望它在秒和分钟返回。 我怎么去做呢? 我正在寻找一种方法来做到这一点,而不用乘以/除以1000,而是使整个计算更具可读性和更less错误倾向的方法。

我会build议使用TimeUnit 。 你可以像这样使用它:

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

在将millis转换为秒(除以1000)后,可以使用/ 60获取分钟值, % 60 (其余)获取“分钟数”值。

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

这只是基本的math。 1000毫秒= 1秒,60000毫秒= 1分钟; 所以只是做,

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

X毫秒= X / 1000秒=(X / 1000)/ 60分钟

如果您有100,000毫秒,请将此值除以1,000,剩下100秒。 现在100/60 = 1.666分钟,但分数分钟没有价值,所以:100%60 = 40秒find余数,然后整数除法100/60 = 1分钟,剩下40秒。 答案:1分40秒。

我不认为Java 1.5支持并发TimeUnit。 否则,我会build议TimeUnit。 以下是基于纯粹的math方法。

 stopWatch.stop(); long milliseconds = stopWatch.getTime(); int seconds = (int) ((milliseconds / 1000) % 60); int minutes = (int) ((milliseconds / 1000) / 60); 

TL;博士

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

Java 9和更高版本

在Java 9和更高版本中,创build一个Duration并调用to…Part方法。 在这种情况下: toMinutesParttoSecondsPart

捕获秒表的开始和停止。

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

Duration对象中表示已用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类缺lessto…Part方法。 你将需要做其他答案中所示的math。

 long entireDurationAsSeconds = d.getSeconds(); 

或让Duration做math。

 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

parsing度

仅供参考, now方法的解决scheme在Java 8和Java 9之间发生了变化。请参阅此问题 。

  • Java 9以高达纳秒的分辨率捕捉瞬间。 (取决于计算机硬件的function)
  • Java 8捕获的时刻只有几毫秒。 Clock的实现仅限于毫秒的分辨率。 所以你可以存储以毫微秒为单位的值,但只能以毫秒为单位捕获它们。

这是一个简单的解决scheme。 可以在任何方法中使用的示例调用:

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

这里是完整的程序

 import java.util.concurrent.TimeUnit; 

公共类毫秒{

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

}

我在这里find这个程序“ 链接 ”,这里详细解释一下。