【问题标题】:How to convert minutes to Hours and minutes (hh:mm) in java如何在java中将分钟转换为小时和分钟(hh:mm)
【发布时间】:2011-03-22 05:51:37
【问题描述】:

我需要在 java 中将分钟转换为小时和分钟。例如 260 分钟应该是 4:20。谁能帮我转换一下。

【问题讨论】:

标签: java


【解决方案1】:

如果你的时间在一个名为t的变量中

int hours = t / 60; //since both are ints, you get an int
int minutes = t % 60;
System.out.printf("%d:%02d", hours, minutes);

再简单不过了

2021 年的附录:

请注意,这个答案是关于问题的字面意思:如何将分钟数转换为小时+分钟。它与时间、时区、AM/PM 无关......

如果您需要更好地控制这类事情,即您要处理的是时间点,而不仅仅是几分钟和几小时,请参阅下面的Basil Bourque's answer

【讨论】:

  • 有没有办法用 Java 8 Duration 实现这一点?
  • 如果t 可以是<0(负数),那么第二行应该是int minutes = Math.abs(t) % 60;
  • 如果你想要 am 或 pm 随着时间添加这个条件 String amOrPm; if (timeInminutes>=720) amOrPm="PM";否则 amOrPm="AM"; String convertTime=hours +":" +minutes+amOrPm;
  • 如何处理非 AM/PM 语言环境?这只是部分的、非本地化的解决方案。
【解决方案2】:

tl;博士

Duration.ofMinutes( 260L )
        .toString()

PT4H20M

……或……

LocalTime.MIN.plus( 
    Duration.ofMinutes( 260L ) 
).toString()

04:20

Duration

java.time 类包括一对表示时间跨度的类。 Duration 类用于小时-分钟-秒,Period 用于年-月-日。

Duration d = Duration.ofMinutes( 260L );

Duration 部分

通过调用to…Part 访问Duration 的每个部分。这些方法是在 Java 9 及更高版本中添加的。

long days = d.toDaysPart() ;
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
int nanos = d.toNanosPart() ;

然后您可以从这些部分组装您自己的字符串。

ISO 8601

ISO 8601 标准定义了日期时间值的文本格式。对于未附加到时间线的时间跨度,standard formatPnYnMnDTnHnMnSP 标志着开始,T 将年-月-日与小时-分钟-秒分开。所以一个半小时是PT1H30M

java.time 类默认使用 ISO 8601 格式来解析和生成字符串。 DurationPeriod 类使用这种特定的标准格式。所以只需致电toString

String output = d.toString(); 

PT4H20M

对于替代格式,使用Duration::to…Part 方法在 Java 9 及更高版本(not 在 Java 8 中)构建您自己的字符串。或者参见this Answer 使用正则表达式来操作 ISO 8601 格式的字符串。

LocalTime

我强烈建议使用标准的 ISO 8601 格式,而不是 04:20 这种极其模糊和令人困惑的时钟格式。但是如果你坚持,你可以通过使用LocalTime 类来获得这种效果。如果您的持续时间不超过 24 小时,则此方法有效。

LocalTime hackUseOfClockAsDuration = LocalTime.MIN.plus( d );
String output = hackUseOfClockAsDuration.toString();

04:20


关于java.time

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

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

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

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

【讨论】:

  • 很好,我正在寻找类似的东西,但我希望得到“4h 20m”或“4h 20min”而不是“PT4H20M”或“04:20”的结果。我想我必须使用某种格式化方法?
  • @aditsuquitbecauseSEisEVIL Java 9 带来了Duration::to…Part 方法,显示了我对这个答案的编辑。您可以轻松地从这些部分组装自己的字符串。
【解决方案3】:

使用java.text.SimpleDateFormat 将分钟转换为小时和分钟

SimpleDateFormat sdf = new SimpleDateFormat("mm");

try {
    Date dt = sdf.parse("90");
    sdf = new SimpleDateFormat("HH:mm");
    System.out.println(sdf.format(dt));
} catch (ParseException e) {
    e.printStackTrace();
}

【讨论】:

    【解决方案4】:

    您也可以使用TimeUnit 类。你可以定义

    private static final String FORMAT = "%02d:%02d:%02d";
    可以有这样的方法: 公共静态字符串解析时间(长毫秒){ 返回字符串.格式(格式, TimeUnit.MILLISECONDS.toHours(毫秒), TimeUnit.MILLISECONDS.toMinutes(毫秒) - TimeUnit.HOURS.toMinutes( TimeUnit.MILLISECONDS.toHours(毫秒)), TimeUnit.MILLISECONDS.toSeconds(毫秒) - TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toMinutes(毫秒))); }

    【讨论】:

    • 我知道它比接受答案中的代码长一点,但恕我直言,它也更清晰。我更喜欢这个。
    【解决方案5】:

    我将此功能用于我的项目:

     public static String minuteToTime(int minute) {
        int hour = minute / 60;
        minute %= 60;
        String p = "AM";
        if (hour >= 12) {
            hour %= 12;
            p = "PM";
        }
        if (hour == 0) {
            hour = 12;
        }
        return (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + " " + p;
    }
    

    【讨论】:

      【解决方案6】:

      可以这样实现

              int totalMinutesInt = Integer.valueOf(totalMinutes.toString());
      
              int hours = totalMinutesInt / 60;
              int hoursToDisplay = hours;
      
              if (hours > 12) {
                  hoursToDisplay = hoursToDisplay - 12;
              }
      
              int minutesToDisplay = totalMinutesInt - (hours * 60);
      
              String minToDisplay = null;
              if(minutesToDisplay == 0 ) minToDisplay = "00";     
              else if( minutesToDisplay < 10 ) minToDisplay = "0" + minutesToDisplay ;
              else minToDisplay = "" + minutesToDisplay ;
      
              String displayValue = hoursToDisplay + ":" + minToDisplay;
      
              if (hours < 12)
                  displayValue = displayValue + " AM";
              else
                  displayValue = displayValue + " PM";
      
              return displayValue;
          } catch (Exception e) {
              LOGGER.error("Error while converting currency.");
          }
          return totalMinutes.toString();
      

      【讨论】:

      【解决方案7】:

      (在 Kotlin 中)如果您要将答案放入 TextView 或其他内容中,您可以使用字符串资源:

      <string name="time">%02d:%02d</string>
      

      然后您可以使用此字符串资源在运行时设置文本:

      private fun setTime(time: Int) {
          val hour = time / 60
          val min = time % 60
          main_time.text = getString(R.string.time, hour, min)
      }
      

      【讨论】:

        【解决方案8】:

        在几秒钟内给定输入,您可以像这样转换为 hh:mm:ss 格式:

        int hours;
        int minutes;
        int seconds;
        int formatHelper;
        
        int input;
        
        
        //formatHelper maximum value is 24 hours represented in seconds
        
        formatHelper = input % (24*60*60);
        
        //for example let's say format helper is 7500 seconds
        
        hours = formatHelper/60*60;
        minutes = formatHelper/60%60;
        seconds = formatHelper%60;
        
        //now operations above will give you result = 2hours : 5 minutes : 0 seconds;
        

        我使用了 formatHelper,因为输入可以超过 86 400 秒,即 24 小时。

        如果您希望输入的总时间由 hh:mm:ss 表示,则可以避免使用 formatHelper。

        希望对你有帮助。

        【讨论】:

        • 不起作用。如果input是7500,那么结果就是7500小时5分0秒,这显然是错误的。而且这个问题根本没有提到秒。
        • @fdermishin 是正确的。 Try it online!
        【解决方案9】:

        这是我将second,millisecond 转换为day,hour,minute,second 的函数

        public static String millisecondToFullTime(long millisecond) {
            return timeUnitToFullTime(millisecond, TimeUnit.MILLISECONDS);
        }
        
        public static String secondToFullTime(long second) {
            return timeUnitToFullTime(second, TimeUnit.SECONDS);
        }
        
        public static String timeUnitToFullTime(long time, TimeUnit timeUnit) {
            long day = timeUnit.toDays(time);
            long hour = timeUnit.toHours(time) % 24;
            long minute = timeUnit.toMinutes(time) % 60;
            long second = timeUnit.toSeconds(time) % 60;
            if (day > 0) {
                return String.format("%dday %02d:%02d:%02d", day, hour, minute, second);
            } else if (hour > 0) {
                return String.format("%d:%02d:%02d", hour, minute, second);
            } else if (minute > 0) {
                return String.format("%d:%02d", minute, second);
            } else {
                return String.format("%02d", second);
            }
        }
        

        测试

        public static void main(String[] args) {
            System.out.println("60 => " + secondToFullTime(60));
            System.out.println("101 => " + secondToFullTime(101));
            System.out.println("601 => " + secondToFullTime(601));
            System.out.println("7601 => " + secondToFullTime(7601));
            System.out.println("36001 => " + secondToFullTime(36001));
            System.out.println("86401 => " + secondToFullTime(86401));
        }
        

        输出

        60 => 1:00
        101 => 1:41
        601 => 10:01
        7601 => 2:06:41
        36001 => 10:00:01
        86401 => 1day 00:00:01
        

        希望对你有帮助

        【讨论】:

          【解决方案10】:

          Minutes mod 60 将给出剩余分钟数小时。

          http://www.cafeaulait.org/course/week2/15.html

          【讨论】:

          • 其实恰恰相反,分钟 mod 60 会给你分钟。看我的回答
          • 你说的很对。这里有点晚了,谢谢你的澄清!
          【解决方案11】:
          int mHours = t / 60; //since both are ints, you get an int
          int mMinutes = t % 60;
          System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);
          

          【讨论】:

          • 为什么要使用整数格式%d来格式化字符串值"" +mHours"" +mMinutes
          【解决方案12】:
          long d1Ms=asa.getTime();   
          long d2Ms=asa2.getTime();   
          long minute = Math.abs((d1Ms-d2Ms)/60000);   
          int Hours = (int)minute/60;     
          int Minutes = (int)minute%60;     
          stUr.setText(Hours+":"+Minutes); 
          

          【讨论】:

          • 以上两个将抑制presistion数字
          【解决方案13】:

          试试这个代码:

          import java.util.Scanner;
          
          public class BasicElement {
              public static void main(String[] args){
                  Scanner input = new Scanner(System.in);
                  int hours;
                  System.out.print("Enter the hours to convert:");
                  hours =input.nextInt();
                  int d=hours/24;
                  int m=hours%24;
                  System.out.println(d+"days"+" "+m+"hours");     
          
              }
          }
          

          【讨论】:

          • 从分钟到小时和分钟
          【解决方案14】:
          import java.util.Scanner;
          public class Time{
              public static void main(String[]args){
                  int totMins=0;
                  int hours=0;
                  int mins=0;
              Scanner sc= new Scanner(System.in);
              System.out.println("Enter the time in mins: ");
                  totMins= sc.nextInt();
                  hours=(int)(totMins/60);
                  mins =(int)(totMins%60);
                  System.out.printf("%d:%d",hours,mins);
              }
          }
          

          【讨论】:

          • 这与接受的答案有何不同?
          猜你喜欢
          • 2021-02-22
          • 2015-07-20
          • 2019-10-22
          • 1970-01-01
          • 2011-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-18
          相关资源
          最近更新 更多