【问题标题】: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 分钟。
  • 查看此帖子:stackoverflow.com/questions/625433/…。应该能得到你想要的。
  • 这其实是一个很简单的问题。你试过什么?
  • 你可以这样做readyandroid.wordpress.com/…

标签: java time type-conversion stopwatch watch


【解决方案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);

【讨论】:

【解决方案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 类?

【讨论】:

【解决方案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 "${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"
          }
          

          【讨论】:

            【解决方案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 方法将整个持续时间报告为毫秒。
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-02-13
                        • 2012-09-27
                        • 2018-11-16
                        • 2013-01-12
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多