我已经看过以前的问题,但是没有一个我一直在寻找答案。如何将秒表方法中的毫秒转换为分钟和秒?我有:
watch.start();
启动秒表,
watch.stop();
停下手表。我后来有
watch.getTime();
返回毫秒。我希望它在秒和分钟后返回。我该怎么做?我正在寻找一种方法,而不用乘以1000,而不是乘以除法,而是要一种使整个计算更具可读性且更不易出错的方法。
我已经看过以前的问题,但是没有一个我一直在寻找答案。如何将秒表方法中的毫秒转换为分钟和秒?我有:
watch.start();
启动秒表,
watch.stop();
停下手表。我后来有
watch.getTime();
返回毫秒。我希望它在秒和分钟后返回。我该怎么做?我正在寻找一种方法,而不用乘以1000,而不是乘以除法,而是要一种使整个计算更具可读性且更不易出错的方法。
Answers:
我建议使用TimeUnit
。您可以像这样使用它:
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
minutes = ((milliseconds / 1000) / 60)
1 minute 30 seconds
答案”提供分钟或秒1 minute 90 seconds
。
将毫秒转换为秒后(除以1000),您可以/ 60
用来获取分钟值,而% 60
(余数)可以获取“秒数”值。
long millis = .....; // obtained from StopWatch
long minutes = (millis / 1000) / 60;
int seconds = (int)((millis / 1000) % 60);
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() ;
请参阅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
仅限于毫秒级的分辨率。因此,您可以以纳秒为单位存储值,但只能以毫秒为单位捕获它们。该java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.Date
,Calendar
,和SimpleDateFormat
。
要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*
在哪里获取java.time类?
这只是基础数学。1000毫秒= 1秒,60000毫秒= 1分钟;这样吧
int seconds=(millis/1000)%60;
long minutes=((millis-seconds)/1000)/60;
(millis/1000-seconds)/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;
}
这是完整的程序
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 );
}
}
我在这里的“链接”中找到了该程序,并对其进行了详细说明。
要将以毫秒为单位的时间直接转换为分钟:您可以使用第二种格式
String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));
这将以正确的格式返回带有时间的字符串。它为我工作。
您可以尝试以这种方式进行:
从传递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"
}
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
您可以轻松地将毫秒转换为秒,分钟和小时。
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
--------------------------------------------------------------------
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();
}
}
这是一个简单的解决方案。可以在任何方法中使用的示例调用:
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");
}
}
toMillis
方法报告整个持续时间(以毫秒为单位)。