Cómo convertir minutos a horas y minutos (hh: mm) en java

82

Necesito convertir minutos a horas y minutos en java. Por ejemplo, 260 debería ser 4:20. ¿Alguien puede ayudarme a convertirlo?

lakshmi
fuente
¿24 horas o 12 horas con am y pm?
eat_a_lemon
Véase también stackoverflow.com/questions/2704473
trashgod

Respuestas:

193

Si tu tiempo está en una variable llamada t

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

No podría ser más fácil

Federico klez Culloca
fuente
¿Hay alguna forma de lograr esto con Java 8 Duration?
IgorGanapolsky
2
Si tpuede ser <0(negativo), la segunda línea debería ser int minutes = Math.abs(t) % 60;.
Wittich
1
y también si quieres am o pm con la hora agrega esta condición String amOrPm; if (timeInminutes> = 720) amOrPm = "PM"; else amOrPm = "AM"; Cadena ConvertTime = horas + ":" + minutos + amOrPm;
SFAH
¿Qué hacer con las configuraciones regionales que no son AM / PM? Esta es solo una solución parcial, no localizada.
ROR
28

tl; dr

Duration.ofMinutes( 260L )
        .toString()

PT4H20M

... o ...

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

04:20

Duration

Las clases java.time incluyen un par de clases para representar períodos de tiempo. La Durationclase es para horas-minutos-segundos y Periodes para años-meses-días.

Duration d = Duration.ofMinutes( 260L );

Duration partes

Acceda a cada parte del Durationllamando to…Part. Estos métodos se agregaron en Java 9 y versiones posteriores.

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

Luego, puede ensamblar su propia cuerda a partir de esas partes.

ISO 8601

El estándar ISO 8601 define formatos textuales para valores de fecha y hora. Para lapsos de tiempo no vinculados a la línea de tiempo, el formato estándar es PnYnMnDTnHnMnS. El Pmarca el comienzo y Tsepara los años-meses-días de las horas-minutos-segundos. Entonces una hora y media es PT1H30M.

Las clases java.time utilizan formatos ISO 8601 de forma predeterminada para analizar y generar cadenas. Las clases Durationy Periodutilizan este formato estándar en particular. Así que simplemente llama toString.

String output = d.toString(); 

PT4H20M

Para un formato alternativo, cree su propia cadena en Java 9 y posterior ( no en Java 8) con los Duration::to…Partmétodos. O vea esta respuesta para usar regex para manipular la cadena con formato ISO 8601.

LocalTime

Sugiero encarecidamente utilizar el formato estándar ISO 8601 en lugar del formato de reloj extremadamente ambiguo y confuso de 04:20. Pero si insistes, puedes conseguir este efecto pirateando con la LocalTimeclase. Esto funciona si su duración no supera las 24 horas.

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

04:20


Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date, Calendar, y SimpleDateFormat.

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases java.time?

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más .

Albahaca Bourque
fuente
1
Bien, estoy buscando algo como esto, pero me gustaría obtener el resultado como "4h 20m" o "4h 20min" en lugar de "PT4H20M" o "04:20". ¿Supongo que tendré que usar algún tipo de método de formato?
Aditsu renunció porque SE es MALVADO
@aditsuquitbecauseSEisEVIL Java 9 trajo los Duration::to…Partmétodos que se muestran mis ediciones a esta Respuesta. Puede ensamblar fácilmente su propia cuerda a partir de esas partes.
Basil Bourque
12

También puede utilizar la clase TimeUnit . Podrías definir

Cadena final estática privada FORMAT = "% 02d:% 02d:% 02d";
puede tener un método como:

public static String parseTime (milisegundos largos) {
      return String.format (FORMAT,
              TimeUnit.MILLISECONDS.toHours (milisegundos),
              TimeUnit.MILLISECONDS.toMinutes (milisegundos) - TimeUnit.HOURS.toMinutes (
              TimeUnit.MILLISECONDS.toHours (milisegundos)),
              TimeUnit.MILLISECONDS.toSeconds (milisegundos) - TimeUnit.MINUTES.toSeconds (
              TimeUnit.MILLISECONDS.toMinutes (milisegundos)));
   }
walters
fuente
Sé que es un poco más largo que el código en la respuesta aceptada, pero en mi humilde opinión también es más claro. Prefiero esto.
Ole VV
9

Úselo java.text.SimpleDateFormatpara convertir minutos en horas y minutos

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();
}
Athar Iqbal
fuente
3

Se puede hacer así

        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();
Priyanka
fuente
1
Dios, eso es detallado, al igual que FizzBuzz Enterprise Edition: theospears.com/blog/2007/08/11/fizzbuzz-enterprise-edition
ya23
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); 
desarrollador
fuente
los dos anteriores suprimirán los números de presión
desarrollador
1

Prueba este código:

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

    }
}
Jayaramachandran P
fuente
Fueron minutos a horas y minutos
keyer
1

Dada la entrada en segundos, puede transformar al formato hh: mm: ss de esta manera:

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;

He usado formatHelper ya que la entrada puede ser de más de 86 400 segundos, que son 24 horas.

Si desea que el tiempo total de su entrada esté representado por hh: mm: ss, puede simplemente evitar formatHelper.

Espero que ayude.

LightinDarknessJava
fuente
1

Utilizo esta función para mis proyectos:

 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;
}
Shohan Ahmed Sijan
fuente
1

(En Kotlin) Si va a poner la respuesta en un TextView o algo, puede usar un recurso de cadena:

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

Y luego puede usar este recurso String para luego configurar el texto en tiempo de ejecución usando:

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

Aquí está mi función para convertir a second, millisecondaday,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);
    }
}

Pruebas

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

Salida

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

Espero que ayude

Phan Van Linh
fuente
0

Minutos mod 60 dará horas con minutos restantes.

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

Ryre
fuente
En realidad es todo lo contrario, los minutos mod 60 te darán los minutos. Vea mi respuesta
Federico klez Culloca
Tienes toda la razón. Es bastante tarde aquí, ¡gracias por aclarar!
Ryre
0

se te olvida el piso en tu respuesta:

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

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

sin él, su resultado es falso en ciertos casos como, por ejemplo:

t = 525
hours = 8.75 

así que sin Math.floor tenemos este resultado: 9h45 en lugar de 8h45.

usuario2389203
fuente
2
No, no lo hará (a menos que use flotadores para contar segundos ...). Al convertir 8,75 en int, la parte decimal se recorta, no se redondea.
ya23
0

calcule los minutos usando este código:

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

En Swift

func timeStringFrom(minutes:Double) -> String {
    return "\(Int(minutes/60)):\(Int(minutes) % 60)"
}
iCyberPaul
fuente
0
int mHours = t / 60; //since both are ints, you get an int
int mMinutes = t % 60;
System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);
Jigar Patel
fuente
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);
    }
}
Janeth Fernando
fuente