将毫秒转换为分钟和秒?

65 java time stopwatch type-conversion watch

我查看过以前的问题,但没有人得到我想要的答案.如何将StopWatch方法的毫秒转换为分钟和秒?我有:

 watch.start();
Run Code Online (Sandbox Code Playgroud)

启动秒表和

  watch.stop();
Run Code Online (Sandbox Code Playgroud)

停下手表 我以后有

  watch.getTime();
Run Code Online (Sandbox Code Playgroud)

返回毫秒.我希望它能在秒和分钟内返回.我该怎么做呢?我正在寻找一种方法来做到这一点,而不是乘以/除以1000,而是一种方法,使整个计算更具可读性,更不容易出错.

Avi*_*Avi 161

我建议使用TimeUnit.你可以像这样使用它:

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
Run Code Online (Sandbox Code Playgroud)

  • @Sotti很棒?这不解决问题!该问题要求分钟***和***秒,作为秒表的读数,例如"1分30秒".本答案提供分钟***或***秒,例如1分90秒. (5认同)
  • 这似乎是Java 5到7的最佳答案. (2认同)

Ita*_*man 36

将millis转换为秒后(除以1000),您可以使用/ 60获取分钟值,并使用% 60(余数)获得"以秒为单位"值.

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 14

TL;博士

Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
Run Code Online (Sandbox Code Playgroud)

Java 9及更高版本

在Java 9及更高版本中,创建Duration并调用to…Part方法.在这种情况下:toMinutesParttoSecondsPart.

捕捉秒表的开始和停止.

Instant start = Instant.now(); 
…
Instant stop = Instant.now();
Run Code Online (Sandbox Code Playgroud)

表示Duration对象中的已用时间.

Duration d = Duration.between( start , stop );
Run Code Online (Sandbox Code Playgroud)

询问每个部分,分钟和秒.

int minutes = d.toMinutesPart();
int seconds = d.toSecondsPart();
Run Code Online (Sandbox Code Playgroud)

您可能还想看看您的秒表是否预计会长时间运行.

Boolean ranTooLong = ( d.toDaysPart() > 0 ) || ( d.toHoursPart() > 0 ) ;
Run Code Online (Sandbox Code Playgroud)

Java 8

在Java 8中,Duration该类缺少to…Part方法.你将需要做其他答案中显示的数学.

long entireDurationAsSeconds = d.getSeconds();
Run Code Online (Sandbox Code Playgroud)

或者让我们Duration做数学.

long minutesPart = d.toMinutes(); 
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;
Run Code Online (Sandbox Code Playgroud)

请参阅IdeOne.com中的实时代码.

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

d.toString():PT2M15S

d.getSeconds():135

经过:2M 15S

解析度

仅供参考,nowJava 8和Java 9之间的方法解决方案已经更改.请参阅此问题.

  • Java 9以分辨率精确到纳秒来捕获瞬间.分辨率取决于计算机硬件的功能.我在MacBook Pro Retina上看到macOS Sierra的微秒(小数位数的六位数).
  • Java 8捕获的时刻仅为几毫秒.实现Clock限于毫秒的分辨率.因此,您可以以纳秒为单位存储值,但只能以毫秒为单位捕获它们.


Dul*_*nga 10

这只是基本的数学.1000毫秒= 1秒,60000毫秒= 1分钟; 所以,做到

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;
Run Code Online (Sandbox Code Playgroud)

  • 有一个错误 - 第二行应该是`(毫秒/ 1000秒)/ 60` (14认同)

che*_*cho 8

  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);
  }
Run Code Online (Sandbox Code Playgroud)

更短的形式!

  public static String getIntervalTime(long longInterval) {

    long intMillis = longInterval;
    long dd = TimeUnit.MILLISECONDS.toDays(intMillis);
    intMillis -= TimeUnit.DAYS.toMillis(dd);
    long hh = TimeUnit.MILLISECONDS.toHours(intMillis);
    intMillis -= TimeUnit.HOURS.toMillis(hh);
    long mm = TimeUnit.MILLISECONDS.toMinutes(intMillis);
    intMillis -= TimeUnit.MINUTES.toMillis(mm);
    long ss = TimeUnit.MILLISECONDS.toSeconds(intMillis);
    intMillis -= TimeUnit.SECONDS.toMillis(ss);

    String stringInterval = "%02d days - %02d:%02d:%02d.%03d";
    return String.format(stringInterval , dd, hh, mm, ss, intMillis);
  }
Run Code Online (Sandbox Code Playgroud)

测试

long delay = 1000*60*20 + 1000*5 + 10;
LOGGER.log(Level.INFO, "Delay Expected {0}", getIntervalTime(delay));
Run Code Online (Sandbox Code Playgroud)

输出

INFO: Delay Expected 00 days - 00:20:05.010
Run Code Online (Sandbox Code Playgroud)


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

}
}
Run Code Online (Sandbox Code Playgroud)

我发现这个程序在这里" 链接 "在那里详细解释.

  • 这**不解决问题**。问题要求分钟 * 和 * 秒,作为秒表的读数。您给出两个单独的结果,分钟 * 或 * 秒.d (2认同)

Jee*_*eva 7

我正在为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;
}
Run Code Online (Sandbox Code Playgroud)


Pri*_*ary 7

要将时间以毫秒为单位直接转换为分钟:您可以使用第二个格式

String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
Run Code Online (Sandbox Code Playgroud)

这将以正确的格式返回一个带有时间的字符串。它对我有用。


Mas*_*ali 7

我需要将计时器的毫秒转换为分钟和秒,所以我使用了这段代码。

private String getTime(long millisecond) {
    
    long min = TimeUnit.MILLISECONDS.toMinutes(millisecond);
    long sec = TimeUnit.MILLISECONDS.toSeconds(millisecond) - 
       TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisecond));

    String time = min + ":" + sec;
    return time;
}
Run Code Online (Sandbox Code Playgroud)

对于反转,每分钟等于 60,000 毫秒,每秒等于 1000 毫秒。所以 :

 long millisecond = minutes * 60000;
 long millisecond = seconds * 1000;
Run Code Online (Sandbox Code Playgroud)

或者

 long millisecond = TimeUnit.SECONDS.toMillis(seconds);
Run Code Online (Sandbox Code Playgroud)


Kon*_*Kon 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

要获得手表上显示的实际时,分和秒,请尝试以下代码

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
Run Code Online (Sandbox Code Playgroud)


Irw*_*cki 5

您可以尝试以这种方式进行:

传递 ms 值来自

Long ms = watch.getTime();
Run Code Online (Sandbox Code Playgroud)

getDisplayValue(ms)
Run Code Online (Sandbox Code Playgroud)

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"
}
Run Code Online (Sandbox Code Playgroud)

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"
}
Run Code Online (Sandbox Code Playgroud)