Hacemos una verificación exhaustiva cada una de las noticias de nuestro sitio web con el objetivo de enseñarte en todo momento información más veraz y certera.
Solución:
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
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 lapsos de tiempo. los Duration
la clase es para horas-minutos-segundos, y Period
es para años-meses-días.
Duration d = Duration.ofMinutes( 260L );
Duration
partes
Accede a cada parte del Duration
llamando 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() ;
A continuación, puede montar su propio string de esas partes.
ISO 8601
El estándar ISO 8601 define formatos de texto para valores de fecha y hora. Para períodos de tiempo no vinculados a la línea de tiempo, el formato estándar es PnYnMnDTnHnMnS
. los P
marca el comienzo, y el T
separa los años-mes-días de las horas-minutos-segundos. Entonces una hora y media es PT1H30M
.
Las clases java.time usan formatos ISO 8601 por defecto para analizar y generar cadenas. los Duration
y Period
las clases usan este formato estándar particular. Así que simplemente llama toString
.
String output = d.toString();
PT4H20M
Para un formato alternativo, cree su propio String en Java 9 y versiones posteriores (no en Java 8) con el Duration::to…Part
métodos. O vea esta respuesta para usar expresiones regulares para manipular el formato ISO 8601 string.
LocalTime
Recomiendo 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 hackeando con el LocalTime
clase. 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 reemplazan a las antiguas y problemáticas clases heredadas de fecha y hora, como java.util.Date
, Calendar
& 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?
- Java SE 8 y SE 9 y después
- Incorporado.
- Parte de la API de Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de java.time está adaptada a Java 6 y 7 en ThreeTen-Backport.
- Androide
- los TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Ver Cómo usar ThreeTenABP….
El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y más.
También puede utilizar la clase TimeUnit. podrías definir
private static final String FORMAT = "%02d:%02d:%02d";
puede tener un método como:
public static String parseTime(long milliseconds) return String.format(FORMAT, TimeUnit.MILLISECONDS.toHours(milliseconds), TimeUnit.MILLISECONDS.toMinutes(milliseconds) - TimeUnit.HOURS.toMinutes( TimeUnit.MILLISECONDS.toHours(milliseconds)), TimeUnit.MILLISECONDS.toSeconds(milliseconds) - TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
Si estás contento con lo expuesto, tienes el poder dejar una crónica acerca de qué le añadirías a esta noticia.