我已经浏览了以前的问题,但没有一个答案是我想要的。如何将秒表方法中的毫秒转换为分和秒?我有:
watch.start();
启动秒表和
watch.stop();
停止手表。我后来有
watch.getTime();
返回毫秒。我希望它在秒和分钟内返回。我该怎么做呢?我正在寻找一种无需乘以/除以 1000 的方法,而是一种使整个计算更具可读性且不易出错的方法。
我已经浏览了以前的问题,但没有一个答案是我想要的。如何将秒表方法中的毫秒转换为分和秒?我有:
watch.start();
启动秒表和
watch.stop();
停止手表。我后来有
watch.getTime();
返回毫秒。我希望它在秒和分钟内返回。我该怎么做呢?我正在寻找一种无需乘以/除以 1000 的方法,而是一种使整个计算更具可读性且不易出错的方法。
我建议使用TimeUnit
. 你可以像这样使用它:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
将毫秒转换为秒后(除以 1000),您可以使用/ 60
获取分钟值,使用% 60
(余数) 获取“分钟秒数”值。
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (int)((millis / 1000) % 60);
我正在为 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;
}
这只是基本的数学。1000 毫秒 = 1 秒和 60000 毫秒 = 1 分钟;所以就这样做,
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
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);
}
更短的形式!
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);
}
测试
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
要将时间以毫秒为单位直接转换为分钟:秒格式,您可以使用它
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
这将以正确的格式返回一个带有时间的字符串。它对我有用。
X 毫秒 = X / 1000 秒 = (X / 1000) / 60 分钟
如果您有 100,000 毫秒,则将此值除以 1,000,剩下 100 秒。现在 100 / 60 = 1.666~ 分钟,但小数分钟没有值,所以:做 100 % 60 = 40 秒求余数,然后整数除法 100 / 60 = 1 分钟,余数为 40 秒。答:1分40秒。
这是完整的程序
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 );
}
}
我在这里“链接”找到了这个程序,那里有详细的解释。
要获得手表上显示的实际小时、分钟和秒,请尝试此代码
val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
您可以尝试以这种方式进行:
传递 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"
}
我不认为 Java 1.5 支持并发 TimeUnit。否则,我建议使用 TimeUnit。以下是基于纯数学方法。
stopWatch.stop();
long milliseconds = stopWatch.getTime();
int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
下面的代码用于将 ms 转换为 min:secs 与 [m:ss] 格式
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]
您可以轻松地将毫秒转换为秒、分钟和小时。
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
--------------------------------------------------------------------
Apache Commons Lang 类DurationFormatUtils
。这个类有一些开箱即用的标准格式,但也支持自定义格式。
String result = DurationFormatUtils.formatDuration(millis, "mm:ss.SSS' sec.'");
我需要将毫秒转换为分钟和秒以用于计时器,所以我使用了这段代码。
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;
}
对于倒车,每分钟等于 60,000 毫秒,每秒等于 1000 毫秒。所以 :
long millisecond = minutes * 60000;
long millisecond = seconds * 1000;
或者
long millisecond = TimeUnit.SECONDS.toMillis(seconds);
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();
}
}
这与之前的帖子有关,但我认为提出的解决方案不太正确。
为了实现正确的转换,这是应该实现的:
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"
这是一个简单的解决方案。可以在任何方法中使用的示例调用:
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");
}
}