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)
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
Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
Run Code Online (Sandbox Code Playgroud)
在Java 9及更高版本中,创建Duration
并调用to…Part
方法.在这种情况下:toMinutesPart
和toSecondsPart
.
捕捉秒表的开始和停止.
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中,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
仅供参考,now
Java 8和Java 9之间的方法解决方案已经更改.请参阅此问题.
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)
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)
我发现这个程序在这里" 链接 "在那里详细解释.
我正在为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)
要将时间以毫秒为单位直接转换为分钟:您可以使用第二个格式
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
Run Code Online (Sandbox Code Playgroud)
这将以正确的格式返回一个带有时间的字符串。它对我有用。
我需要将计时器的毫秒转换为分钟和秒,所以我使用了这段代码。
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)
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)
您可以尝试以这种方式进行:
传递 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)