我查看过以前的问题,但没有人得到我想要的答案。 如何将StopWatch方法的毫秒转换为分钟和秒? 我有:
watch.start();
启动秒表和
watch.stop();
停止观看。我后来有
watch.getTime();
返回毫秒。我希望它能在秒和分钟内返回。我该怎么做呢? 我正在寻找一种方法来实现它,而不是乘以/除以1000,而是一种方法,可以使整个计算更具可读性,更不容易出错。
答案 0 :(得分:150)
我建议使用TimeUnit
。您可以像这样使用它:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
答案 1 :(得分:33)
将millis转换为秒后(除以1000),您可以使用/ 60
获取分钟值,使用% 60
(余数)来获取“以分钟为单位”的值。
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (int)((millis / 1000) % 60);
答案 2 :(得分:9)
这只是基本的数学。 1000毫秒= 1秒,60000毫秒= 1分钟; 所以就这么做,
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
答案 3 :(得分:9)
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() ;
时间间隔:2016-12-18T08:39:34.099Z / 2016-12-18T08:41:49.099Z
d.toString():PT2M15S
d.getSeconds():135
经过:2M 15S
仅供参考,在Java 8和Java 9之间更改了now
方法的解析。请参阅this Question。
Clock
的实现仅限于毫秒的分辨率。所以你可以用纳秒来存储值,但只能在几毫秒内捕获。答案 4 :(得分:6)
这是完整的程序
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”,详细解释了它。
答案 5 :(得分:5)
我正在为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;
}
答案 6 :(得分:5)
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);
}
测试
long delay = 1000*60*20 + 1000*5 + 10;
LOGGER.log(Level.INFO, "Delay Expected {0}", getIntervalTime(delay));
输出
INFO: Delay Expected 00 days - 00:20:05.010
答案 7 :(得分:4)
X毫秒= X / 1000秒=(X / 1000)/ 60分钟
如果您有100,000毫秒,请将此值除以1,000,然后保留100秒。现在100/60 = 1.666~分钟,但小数分钟没有值,所以:做100%60 = 40秒找到余数,然后整数除法100/60 = 1分钟,剩余40秒。答案:1分40秒。
答案 8 :(得分:3)
要获取手表上显示的实际时,分和秒,请尝试以下代码
val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
答案 9 :(得分:3)
您可以尝试以这种方式进行操作:
从中传递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"
}
答案 10 :(得分:3)
我认为Java 1.5不支持并发TimeUnit。否则,我建议使用TimeUnit。以下是基于纯数学方法。
NSDictionary *nameDict = [[friendRow objectAtIndex:0]objectForKey:@"name"];
答案 11 :(得分:2)
要将毫秒单位的时间直接转换为分钟:您可以使用第二种格式
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
这将以正确的格式返回带时间的字符串。 它对我有用。
答案 12 :(得分:0)
这是一个简单的解决方案。 可以在任何方法中使用的示例调用:
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");
}
}
答案 13 :(得分:0)
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();
}
}
答案 14 :(得分:0)
您可以轻松地将毫秒转换为秒,分钟和小时。
val millis = **milliSecondsYouWantToConvert**
val seconds = (millis / 1000) % 60
val minutes = ((millis / 1000) / 60) % 60
val hours = ((millis / 1000) / 60) / 60
println("--------------------------------------------------------------------")
println(String.format("%02dh : %02dm : %02ds remaining", hours, minutes, seconds))
println("--------------------------------------------------------------------")
**RESULT :**
--------------------------------------------------------------------
01h : 23m : 37s remaining
--------------------------------------------------------------------
答案 15 :(得分:-1)
下面的代码完成了将ms转换为[m:ss]格式的min:secs的工作
int seconds;
int minutes;
String Sec;
long Mills = ...; // Milliseconds goes here
minutes = (int)(Mills / 1000) / 60;
seconds = (int)((Mills / 1000) % 60);
Sec = seconds+"";
TextView.setText(minutes+":"+Sec);//Display duration [3:40]
答案 16 :(得分:-1)
这与之前的帖子有关,但在我看来,提出的解决方案不太正确。
为了实现正确的转换,这是应该实现的:
long time_millis = 1926546
int minutes = time_millis / 1000 / 60
int seconds = ((int)(time_millis / 1000) % 60) #important that this division is cast to an int
println "Build time: $minutes minutes $seconds seconds"