Convertir des minutes en heures et minutes (HH:MM) en Java
Convertir un nombre de minutes en format HH:MM (ou HH:MM:SS) est une opération courante en Java, par exemple pour afficher une durée de trajet, de vidéo ou de traitement. Il existe plusieurs approches selon la version de Java et la précision souhaitée.
Méthode 1 : arithmétique simple (compatible Java 1+)
L'approche la plus directe, sans aucune bibliothèque :
public static String formatMinutes(int totalMinutes) {
int hours = totalMinutes / 60;
int minutes = totalMinutes % 60;
return String.format("%02d:%02d", hours, minutes);
}
// Exemples
formatMinutes(90); // "01:30"
formatMinutes(125); // "02:05"
formatMinutes(1440); // "24:00"
Le format %02d ajoute un zéro devant les nombres à un chiffre, garantissant un affichage sur deux chiffres.
Méthode 2 : conversion depuis les secondes
Si votre donnée d'entrée est en secondes et vous voulez HH:MM:SS :
public static String formatSeconds(long totalSeconds) {
long hours = totalSeconds / 3600;
long minutes = (totalSeconds % 3600) / 60;
long seconds = totalSeconds % 60;
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}
formatSeconds(3725); // "01:02:05"
Méthode 3 : avec Duration (Java 8+)
L'API java.time.Duration est plus expressive pour manipuler des durées :
import java.time.Duration;
public static String formatMinutesWithDuration(long minutes) {
Duration d = Duration.ofMinutes(minutes);
long h = d.toHours();
long m = d.minusHours(h).toMinutes();
return String.format("%02d:%02d", h, m);
}
formatMinutesWithDuration(185); // "03:05"
Méthode 4 : avec LocalTime (limité à 24h)
LocalTime offre un formatage élégant mais impose une contrainte forte : la durée doit rester inférieure à 24 heures.
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public static String formatMinutesWithLocalTime(int minutes) {
LocalTime time = LocalTime.MIDNIGHT.plusMinutes(minutes);
return time.format(DateTimeFormatter.ofPattern("HH:mm"));
}
formatMinutesWithLocalTime(125); // "02:05"
formatMinutesWithLocalTime(1500); // ❌ DateTimeException : dépasse 24h
À réserver aux cas où l'on sait que la durée est bornée (horaires journaliers, heures d'ouverture).
Gérer les durées supérieures à 24 heures
Si vous manipulez des durées cumulées (temps de lecture d'une série, temps de traitement sur plusieurs jours), l'arithmétique simple reste la plus robuste :
public static String formatLongDuration(long minutes) {
long days = minutes / (24 * 60);
long hours = (minutes / 60) % 24;
long mins = minutes % 60;
if (days > 0) {
return String.format("%d j %02d:%02d", days, hours, mins);
}
return String.format("%02d:%02d", hours, mins);
}
formatLongDuration(2880); // "2 j 00:00"
formatLongDuration(3000); // "2 j 02:00"
Gérer les valeurs négatives
Une durée négative peut apparaître lors de calculs d'écart entre deux dates. Vous pouvez choisir d'afficher un signe :
public static String formatSigned(long minutes) {
String sign = minutes < 0 ? "-" : "";
long abs = Math.abs(minutes);
return String.format("%s%02d:%02d", sign, abs / 60, abs % 60);
}
formatSigned(-75); // "-01:15"
Conversions inverses utiles
| De | Vers | Formule |
|---|---|---|
| secondes | minutes | s / 60 |
| minutes | heures | m / 60 |
| heures | minutes | h * 60 |
| minutes | jours | m / (24 * 60) |
| secondes | HH:MM:SS | voir méthode 2 |
Parser une chaîne HH:MM vers un nombre de minutes
public static int parseToMinutes(String hhmm) {
String[] parts = hhmm.split(":");
return Integer.parseInt(parts[0]) * 60 + Integer.parseInt(parts[1]);
}
parseToMinutes("02:30"); // 150
Pour du code de production, ajoutez des garde-fous : vérifier le format avec une regex, gérer les NumberFormatException, etc.
Résumé
- Pour un affichage simple
HH:MM: arithmétique entière + String.format. - Pour manipuler des durées :
Durationest plus expressive et plus lisible. - Évitez
LocalTimepour des durées, c'est une heure du jour, pas une durée. - Prévoyez les cas limites : zéro, négatif, > 24 h.
Ces techniques couvrent la totalité des cas de conversion de minutes que vous rencontrerez au quotidien en Java.