将毫秒转换为分和秒?

Posted

技术标签:

【中文标题】将毫秒转换为分和秒?【英文标题】:Converting Milliseconds to Minutes and Seconds? 【发布时间】:2013-07-11 13:15:16 【问题描述】:

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

 watch.start();

启动秒表和

  watch.stop();

停止手表。我后来有

  watch.getTime();

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

【问题讨论】:

x 毫秒 = x / 1000 秒。那么 z 秒 = z / 60 分钟。你可以做 z % 60 来找出剩余的秒数。 基本数学:1000 毫秒 = 1 秒。 60 秒 = 1 分钟。 查看此帖子:***.com/questions/625433/…。应该能得到你想要的。 这其实是一个很简单的问题。你试过什么? 你可以这样做readyandroid.wordpress.com/… 【参考方案1】:

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

long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);

【讨论】:

我唯一的问题是我不知道:如何定义millis(它返回为“millis 无法解析为变量”,我不知道如何在系统中访问它。 out.println(); 方法。 如果毫秒已经很长,您可以只使用数字来执行此操作。几乎不需要引入一个新的库来做一个简单的计算。 minutes = ((milliseconds / 1000) / 60) 这似乎是 Java 5 到 7 的最佳答案。 @Sotti Brilliant?这不解决问题!问题要求分钟秒,作为秒表的读数,例如1 minute 30 seconds 这个答案提供分钟 秒,例如1 minute 90 seconds 我想使用它,但秒数是双精度数,而不是整数,例如 1.5s。这有可能吗?【参考方案2】:

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

long millis = .....;  // obtained from StopWatch
long minutes = (millis / 1000)  / 60;
int seconds = (int)((millis / 1000) % 60);

【讨论】:

你可以这样做readyandroid.wordpress.com/… 最后一行是 Timer 控件的救命稻草,改为使用设计器属性,谢谢!【参考方案3】:

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

分辨率

仅供参考,now 方法的分辨率在 Java 8 和 Java 9 之间发生了变化。请参阅this Question。

Java 9 以纳秒级的分辨率捕捉瞬间。分辨率取决于计算机硬件的能力。我在装有 macOS Sierra 的 MacBook Pro Retina 上看到微秒(六位小数)。 Java 8 最多只能捕捉几毫秒的时间。 Clock 的实现仅限于毫秒的分辨率。因此,您可以在纳秒内存储值,但只能在毫秒内捕获它们。

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

从哪里获得 java.time 类?

Java SE 8Java SE 9Java SE 10Java SE 11 和更高版本 - 具有捆绑实现的标准 Java API 的一部分。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android java.time 类的 Android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

【讨论】:

android 调用需要 api 级别 26。 @Killer 对于早期的 Android,请参阅 ThreeTen-BackportThreeTenABP 项目。【参考方案4】:

我正在为 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;

【讨论】:

【参考方案5】:

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

int seconds=(millis/1000)%60;

long minutes=((millis-seconds)/1000)/60;

【讨论】:

有一个错误 - 第二行应该是(millis/1000-seconds)/60【参考方案6】:

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

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

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

【讨论】:

啊哈,好一个!我刚刚测试了一个以毫秒为单位的计时器并且可以工作! 不错的方法!给定公式,似乎是毫秒/1000 % 60。给定计时器,将是 timer1.Interval 代替毫秒等。【参考方案7】:
  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

【讨论】:

【参考方案8】:

X 毫秒 = X / 1000 秒 = (X / 1000) / 60 分钟

如果您有 100,000 毫秒,则将该值除以 1,000,剩下 100 秒。现在 100 / 60 = 1.666~ 分钟,但小数分钟没有值,所以:做 100 % 60 = 40 秒求余数,然后整数除法 100 / 60 = 1 分钟,余数 40 秒。答案:1 分 40 秒。

【讨论】:

【参考方案9】:

这是完整的程序

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”找到了这个程序,那里有详细的解释。

【讨论】:

不能解决问题。问题要求分钟秒,作为秒表的读数。您给出两个单独的结果,分 seconds.d【参考方案10】:

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

val sec = (milliSec/1000) % 60
val min = ((milliSec/1000) / 60) % 60
val hour = ((milliSec/1000) / 60) / 60

【讨论】:

【参考方案11】:

你可以试试这个方法:

传递 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 "$minutesmin $secondssec"

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"

【讨论】:

【参考方案12】:

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

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

int seconds = (int) ((milliseconds / 1000) % 60);
int minutes = (int) ((milliseconds / 1000) / 60);

【讨论】:

【参考方案13】:

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

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

【讨论】:

【参考方案14】:

以下代码用于将 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]

【讨论】:

【参考方案15】:
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();
    

【讨论】:

【参考方案16】:

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

String result = DurationFormatUtils.formatDuration(millis, "mm:ss.SSS' sec.'");

【讨论】:

【参考方案17】:

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

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

【讨论】:

【参考方案18】:

这与之前的帖子有关,但我认为提出的解决方案不太正确。 为了实现正确的转换,应该这样做:

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"

【讨论】:

很高兴您愿意帮助提供问题的解决方案。但是,需要改进。可能,您应该正确格式化代码,并且可以链接到要更正的问题。此外,您确定这是Java吗?请标记您使用的语言。【参考方案19】:

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

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 方法将整个持续时间报告为毫秒。

以上是关于将毫秒转换为分和秒?的主要内容,如果未能解决你的问题,请参考以下文章

第六章第二十五题(将毫秒数转换成小时数分钟数和秒数)(Convert milliseconds to hours, minutes, and seconds) - 编程练习题答案

PHP 将十进制度转换为度,分和秒序数

C语言 已知一个从1970到现在的毫秒数,如何将这个毫秒转换为具体的日期时间?

API--Date-毫秒值和对象之间的转换

如何在 sequelize 标准 createdAt 字段中使用毫秒?

H2 将日期转换为毫秒