90

我已经浏览了以前的问题,但没有一个答案是我想要的。如何将秒表方法中的毫秒转换为分和秒?我有:

 watch.start();

启动秒表和

  watch.stop();

停止手表。我后来有

  watch.getTime();

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

4

19 回答 19

209

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

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
于 2013-07-12T22:59:58.840 回答
58

将毫秒转换为秒后(除以 1000),您可以使用/ 60获取分钟值,使用% 60(余数) 获取“分钟秒数”值。

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);
于 2013-07-12T21:41:44.457 回答
31
于 2016-12-18T00:10:07.940 回答
14

我正在为 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;
}
于 2018-03-09T23:51:47.303 回答
12

这只是基本的数学。1000 毫秒 = 1 秒和 60000 毫秒 = 1 分钟;所以就这样做,

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;
于 2013-07-12T21:51:46.687 回答
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);
  }

更短的形式!

  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
于 2020-04-26T23:16:52.287 回答
8

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

String durationText = DateUtils.formatElapsedTime(timeInMillis / 1000));

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

于 2018-08-21T06:17:32.230 回答
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秒。

于 2013-07-12T21:34:44.407 回答
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 );

}
}

我在这里“链接”找到了这个程序,那里有详细的解释。

于 2017-10-21T14:17:26.367 回答
5

要获得手表上显示的实际小时、分钟和秒,请尝试此代码

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60
于 2018-08-22T11:26:18.860 回答
5

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

传递 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"
}
于 2018-11-14T11:23:29.537 回答
3

我不认为 Java 1.5 支持并发 TimeUnit。否则,我建议使用 TimeUnit。以下是基于纯数学方法。

stopWatch.stop();
long milliseconds = stopWatch.getTime();

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);
于 2016-01-28T17:57:37.320 回答
1

下面的代码用于将 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]
于 2019-12-07T08:27:04.993 回答
1

您可以轻松地将毫秒转换为秒、分钟和小时。

                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
--------------------------------------------------------------------

于 2019-10-16T07:38:58.897 回答
0

Apache Commons Lang 类DurationFormatUtils。这个类有一些开箱即用的标准格式,但也支持自定义格式。

String result = DurationFormatUtils.formatDuration(millis, "mm:ss.SSS' sec.'");
于 2021-08-23T14:38:17.873 回答
0

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

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);
于 2021-09-08T06:42:21.773 回答
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();
    }
}
于 2019-05-03T14:24:29.867 回答
-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"
于 2021-04-29T15:06:48.170 回答
-2

这是一个简单的解决方案。可以在任何方法中使用的示例调用:

  • 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");
        }
    }
    
于 2016-12-17T17:09:17.603 回答