将毫秒转换为分钟和秒?

时间:2013-07-12 21:32:00

标签: java time type-conversion stopwatch watch

我查看过以前的问题,但没有人得到我想要的答案。 如何将StopWatch方法的毫秒转换为分钟和秒? 我有:

 watch.start();

启动秒表和

  watch.stop();

停止观看。我后来有

  watch.getTime();

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

17 个答案:

答案 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)

TL;博士

Duration d = Duration.ofMillis( … ) ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;

Java 9及更高版本

在Java 9及更高版本中,创建Duration并调用to…Part方法。在这种情况下:toMinutesParttoSecondsPart

捕捉开始&你的秒表停了。

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

在Java 8中,Duration类缺少to…Part方法。你将需要做其他答案中显示的数学。

long entireDurationAsSeconds = d.getSeconds();

或者让Duration进行数学计算。

long minutesPart = d.toMinutes(); 
long secondsPart = d.minusMinutes( minutesPart ).getSeconds() ;

请参阅live code in IdeOne.com

  

时间间隔: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

  • Java 9 以分辨率为纳秒捕获瞬间。分辨率取决于计算机硬件的功能。我在MacBook Pro Retina上看到macOS Sierra的微秒(小数位数的六位数)。
  • Java 8 仅捕获最短毫秒的时刻。 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"