如何将分钟转换成天、小时和分钟

20

如何在Java中将分钟转换为天、小时和分钟(这里有一周,7天)

 public String timeConvert(int time){
   String t = "";

   int h = 00;
   int m = 00;

  // h= (int) (time / 60);
  // m = (int) (time % 60);

  // if(h>=24) h=00;

   if((time>=0) && (time<=24*60)){
      h= (int) (time / 60);
      m = (int) (time % 60);
   }else if((time>24*60) && (time<=24*60*2)){
       h= (int) (time / (1440));
      m = (int) (time % (1440));
   }else if((time>24*60*2) && (time<=24*60*3)){
       h= (int) (time / (2880));
      m = (int) (time % (2880));
   }else if((time>24*60*3) && (time<=24*60*4)){
       h= (int) (time / (2880*2));
      m = (int) (time % (2880*2));
   }else if((time>24*60*4) && (time<=24*60*5)){
       h= (int) (time / (2880*3));
      m = (int) (time % (2880*3));
   }else if((time>24*60*5) && (time<=24*60*6)){
       h= (int) (time / (2880*4));
      m = (int) (time % (2880*4));
   }else if((time>24*60*6) && (time<=24*60*7)){
       h= (int) (time / (2880*5));
      m = (int) (time % (2880*5));
   }

   t =h+":"+m ;
   return t;
 }

我尝试了这个,但它不起作用。
谢谢。
15个回答

41

更简短的方法。(假定时间 >= 0)

 public String timeConvert(int time) { 
   return time/24/60 + ":" + time/60%24 + ':' + time%60;
 }

1
非常好,谢谢。为了防止小数,应该是 Math.floor(time/24/60) + ":" + Math.floor(time/60%24) + ':' + Math.floor(time%60) - Dr. DS
@Dr.DS 在Java中,整数算术运算不会产生小数。time/60的值始终为整数。例如,在Java中,1/60 == 0 - Peter Lawrey
2
抱歉..我刚刚注意到这个答案有一个Java标签。我在寻找类似于JavaScript的东西时发现了你的答案。所以我评论了一个更新,考虑到JavaScript。无论如何...它帮助我朝着正确的方向前进 :-) - Dr. DS

17

如果您想自己完成此操作,请按以下步骤进行:

  1. 将数字除以60 * 24。(这将得到天数。)
  2. 将余数除以60。(这将给出小时数。)
  3. #2的余数即为分钟数。

但是我有不止一天,我的分钟从0开始,到10080结束,使用这个算法后,我会得到136:30。 - Eddinho
3
只要在前两个步骤中同时计算商和余数,Romain的方法就能正常运作。如果你有1600分钟并将其除以(60 * 24),商是1,余数是160,然后再将余数除以60,商为2,余数为40。因此,1600分钟相当于1天2小时40分钟。 - Adrian Lopez

12

如果您使用的是Java 6,则TimeUnit枚举可能很有用。例如:

TimeUnit.HOURS.convert(10, TimeUnit.DAYS)

这个静态调用将10天转换成小时单位,并返回240。你可以从NANOSECONDS开始,一直操作到DAYS。

实际上,TimeUnit自Java 5起就可用了,但在版本6中添加了更多的单位。

--编辑-- 既然我更好地理解了你的问题,请使用类似Romain响应中的除法和取余数方法。我的技巧仅适用于转换为单个时间单位。


谢谢,但我不知道如何使用它,也没有相关文档。 - Eddinho
@tuxou:这里有JavaDoc。 - Valentin Rocher

7

Java-9 java.time 解决方案:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(minutesToDaysHoursMinutes(10080));
        System.out.println(minutesToDaysHoursMinutes(1600));
    }

    public static String minutesToDaysHoursMinutes(int time) {
        Duration d = Duration.ofMinutes(time);
        long days = d.toDaysPart();
        long hours = d.toHoursPart();
        long minutes = d.toMinutesPart();
        return String.format("%d Day(s) %d Hour(s) %d Minute(s)", days, hours, minutes);
    }
}

输出:

7 Day(s) 0 Hour(s) 0 Minute(s)
1 Day(s) 2 Hour(s) 40 Minute(s)

Java-8 java.time 解决方案:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(minutesToDaysHoursMinutes(10080));
        System.out.println(minutesToDaysHoursMinutes(1600));
    }

    public static String minutesToDaysHoursMinutes(int time) {
        Duration d = Duration.ofMinutes(time);
        long days = d.toDays();
        long hours = d.toHours() % 24;
        long minutes = d.toMinutes() % 60;
        return String.format("%d Day(s) %d Hour(s) %d Minute(s)", days, hours, minutes);
    }
}

输出:

7 Day(s) 0 Hour(s) 0 Minute(s)
1 Day(s) 2 Hour(s) 40 Minute(s)

了解现代日期时间API,可从Trail: Date Time学习。


5
答案是:
 public String timeConvert(int time){
   String t = "";

  int j = time/(24*60);
  int h= (time%(24*60)) / 60;
  int m = (time%(24*60)) % 60;



   t =j + ":" + h + ":" + m;
   return t;
 }

你认为这段代码怎么样?

整体来说很不错,但是我改进风格的建议是:a)不要使用单字母变量名;b)避免预先声明从未使用过的变量值,最好这样做:“int hour =(time%(24 * 60))/ 60;” - mikera
1
我不同意Mikira的建议,即尽可能将代码压缩到一行中。然而,如果像Eddinho那样将变量分解成易于理解的步骤,那么其他人就更容易逐步了解您的代码并了解发生了什么。至于a)点,这是一个好观点。我也会避免使用单个字母的变量,除非它们只是在我想出合适名称时作为临时变量。在这些情况下,我会根据变量类型进行描述,例如s表示字符串,i表示int,dt表示DataTable等。非常棒的解决方案,Eddinho。它有效且优雅! - WonderWorker

4

如果有人想在JavaScript中使用被接受的答案,时间将会以小数形式显示。为了去除这些小数,您可以使用以下代码:

function timeConvert(time)
{ 
   return parseInt(time/24/60) + " days," + parseInt(time/60%24) + ' hours,' + parseInt(time%60) + " minutes";
}

4

1) 你的代码重复性太高,这在我看来是糟糕的代码特征。

2) 除数不应该随着天数的变化而变化,因为天数与每小时的分钟数关系较小。

此外,可以参考Romain Hippeau的方法,他已经告诉你如何做了。


3

1天2小时5分钟

public static String convertToDaysHoursMinutes(long minutes) {

    int day = (int)TimeUnit.MINUTES.toDays(minutes);
    long hours = TimeUnit.MINUTES.toHours(minutes) - (day *24);
    long minute = TimeUnit.MINUTES.toMinutes(minutes) - (TimeUnit.MINUTES.toHours(minutes)* 60);

    String result = "";

    if (day != 0){
        result += day;
        if (day == 1){
            result += " day ";
        }
        else{
            result += " days ";
        }
    }

    if (hours != 0){
        result += hours;

        if (hours == 1){
            result += " hr ";
        }
        else{
            result += " hrs ";
        }
    }

    if (minute != 0){
        result += minute;

        if (minute == 1){
            result += " min";
        }
        else{
            result += " mins";
        }
    }

    return result;
}

0
为了最佳可读性,例如不打印0天、0小时或0分钟。 例如-(如果分钟=1500,则仅打印1天1小时)
整数分钟=150;
    StringBuilder sb=new StringBuilder();

    int day=minute/1440;
    int rem=minute%1440;
    int hour=rem/60;
    int Minute=rem%60;

if(day>0)
        sb.append(day+" day ");

if(hour>0)
        sb.append(hour+" hour ");

if(Minute>0)
        sb.append(Minute+" minute");

    System.out.println(sb);

0
class time{
    public static void main (String args[]){
        System.out.println("Hello");
        int duration=1500;
         String testDuration = "";

        if(duration < 60){
            testDuration = duration + " minutes";
        }
        else{

            if((duration / 60)<24)
            {
                if((duration%60)==0){
                    testDuration = (duration / 60) + " hours";
                }
                else{
            testDuration = (duration / 60) + " hours," + (duration%60) + " minutes";
                }
            }
            else{

                if((duration%60)==0){
                    if(((duration/60)%24)==0){
                        testDuration = ((duration / 24)/60) + " days,";

                    }
                    else{
                    testDuration = ((duration / 24)/60) + " days," + (duration/60)%24 +"hours";
                    }
                }
                    else{
                testDuration = ((duration / 24)/60) + " days," + (duration/60)%24 +"hours"+ (duration%60) + " minutes";
                    }
            }
        }

        System.out.println(testDuration);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接