毫秒转换为分钟和秒?
我已经看过以前的问题,但没有人有我正在寻找的答案。 如何将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
方法。 在这种情况下: toMinutesPart
和toSecondsPart
。
捕获秒表的开始和停止。
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这个程序“ 链接 ”,这里详细解释一下。