如何在Java中将分钟转换为小时和分钟(hh:mm)


Answers:


193

如果您的时间在一个名为 t

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

再简单不过了


使用Java 8有什么办法实现这一目标Duration
IgorGanapolsky

2
如果t可以<0(负),则第二行应为int minutes = Math.abs(t) % 60;
wittich '18

1
并且如果您想在上午或下午带时间,请添加此条件String amOrPm; 如果(timeInminutes> = 720)amOrPm =“ PM”; else amOrPm =“ AM”; 字符串convertTime = hours +“:” +分钟+ amOrPm;
SFAH

使用非AM / PM语言环境怎么办?这只是部分非本地解决方案。
ror

28

tl; dr

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

Duration通过调用访问的每个部分to…Part。这些方法是在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标准定义为考证日期时间值的格式。对于未附加到时间轴的时间跨度,标准格式PnYnMnDTnHnMnS。该P标记的开始,而T分离小时-分-秒年-月-日。所以一个半小时就是PT1H30M

默认情况下,java.time类使用ISO 8601格式来解析和生成字符串。在DurationPeriod班用这种特殊的标准格式。因此,只需致电toString

String output = d.toString(); 

PT4H20M

对于备用格式,请使用Java 9及更高版本(而不是Java 8)使用这些Duration::to…Part方法构建自己的String 。或参阅此答案以了解使用正则表达式操作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和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

在哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容打下了基础。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多


1
很好,我正在寻找类似的内容,但我想得到的结果是“ 4h 20m”或“ 4h 20min”,而不是“ PT4H20M”或“ 04:20”。我想我必须使用某种格式化方法?
aditsu退出是因为SE为EVIL,它

@aditsuquitbecauseSEisEVIL Java 9将Duration::to…Part我编辑中显示的方法带到了此答案中。您可以轻松地从这些部分组装自己的琴弦。
罗勒·布尔克

12

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

私有静态最终String FORMAT =“%02d:%02d:%02d”;
可以采用类似以下方法:

公共静态字符串parseTime(长毫秒){
      返回String.format(FORMAT,
              TimeUnit.MILLISECONDS.toHours(毫秒),
              TimeUnit.MILLISECONDS.toMinutes(毫秒)-TimeUnit.HOURS.toMinutes(
              TimeUnit.MILLISECONDS.toHours(毫秒)),
              TimeUnit.MILLISECONDS.toSeconds(毫秒)-TimeUnit.MINUTES.toSeconds(
              TimeUnit.MILLISECONDS.toMinutes(毫秒)));
   }

我知道它比接受的答案中的代码长一点,但是恕我直言,它也更清楚。我喜欢这个。
Ole VV

9

使用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();
}

3

可以这样做

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

1
天哪,这很冗长-就像FizzBu​​zz企业版一样:theospears.com/blog/2007/08/11/fizzbuzz-enterprise-edition
ya23 2013年

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

上面的两个将禁止占位符
开发人员

1

试试这个代码:

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

    }
}

这是几分钟到几小时,只有几分钟
键盘输入,2012年

1

给定输入时间(以秒为单位),您可以像这样转换为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。

希望对您有所帮助。


1

我在项目中使用此功能:

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

1

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

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

然后,您可以使用此String资源在运行时使用以下命令设置文本:

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

1

这里是我的一个转换功能secondmillisecondday,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

希望对你有帮助



0

您在回复中被遗忘了:

int hours = Math.floor(t / 60); 
int minutes = t % 60;

System.out.printf("%d:%02d", hours, minutes);

没有它,您的结果在某些情况下是错误的,例如:

t = 525
hours = 8.75 

因此,如果没有Math.floor,我们将得到以下结果:9h45而不是8h45。


2
不,它不会(除非您使用浮点数来计数秒数...)。将8.75转换为int时,小数部分将被修剪,而不是四舍五入。
2013年

0

使用以下代码计算分钟数:

long difference = new Date().getTime() - user.getUpdatedDate().getTime(); 
        int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);

0

在斯威夫特

func timeStringFrom(minutes:Double) -> String {
    return "\(Int(minutes/60)):\(Int(minutes) % 60)"
}


0
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);
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.