J'ai une chaîne qui a le temps. J'ai besoin de l'arrondir à l'heure la plus proche et aussi la minute la plus proche. Comment puis-je le faire en Java? Ex: String Time = "12:58:15"; J'ai besoin de l'arrondir à 1:00:00 et aussi 12:58:00 p>
6 Réponses :
Un moyen est de la convertir d'abord en une date à l'aide de SimpleDateFormat et sa méthode d'analyse (Javadoc expliquera le format dont vous avez besoin). Ensuite, vous pouvez regarder les secondes et déterminer si vous devriez monter une minute ou une minute (si elle monte, réglez les secondes sur 0 et ajoutez une minute). De même pour l'heure, il suffit de regarder des minutes et s'il est inférieur à 30, arrondir et si plus de trente ans est égal à zéro et augmentez l'heure. p>
Merci pour la réponse. Je dois utiliser un objet de chaîne comme mentionné ci-dessus car je l'obtiendrais à partir d'un fichier texte.
Vous pouvez utiliser le format de date simple pour convertir en date, effectuer votre travail, puis l'utiliser pour convertir en chaîne. Probablement beaucoup plus fiable que d'analyser toutes les permutations possibles de la chaîne. Mais vous pouvez le faire de manière difficile si vous le souhaitez.
Pour les opérations de calendrier, vous devez utiliser une classe de calendrier. Dans votre cas, vous feriez quelque chose comme ceci: et le résultat: p>
Merci pour la réponse. Je dois utiliser un objet de chaîne comme mentionné ci-dessus car je l'obtiendrais à partir d'un fichier texte.
Lorsque vous arrondissez, vous devez également définir calendar.milliseconde code> sur 0 code>, pas seulement secondes (et minutes).
Euh, vous avez "avez" utiliser la classe code> calendrier code>? Non. Vous pouvez faire cette logique RAW à l'aide de la primaire long code>. Par exemple: long maintenant = System.Currenttimemillis (); long arrondi = maintenant - maintenant à% 60000; code> une fois que vous avez longtemps, vous pouvez faire ce que vous voulez.
Créer une date à l'aide de SimpleDateFormat. Créer GregorianCalendar à partir de la date. Rouler les minutes ou les secondes de 30 secondes. Puis réglez minutes ou secondes à 0. p>
Merci pour la réponse. Je dois utiliser un objet de chaîne comme mentionné ci-dessus car je l'obtiendrais à partir d'un fichier texte.
package com.xyz.util;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateTimeUtils {
public static void main(String[] args) {
Date date = new Date();
date.setHours(23);
System.out.println("prev whole hour, millies: "+toWholeHour(date,-1)+", "+toWholeHour(date,-1).getTime());
System.out.println("curr whole hour, millies: "+toWholeHour(date,0)+", "+toWholeHour(date,0).getTime());
System.out.println("next whole hour, millies: "+toWholeHour(date,1)+", "+toWholeHour(date,1).getTime());
System.out.println("prev whole minute, millies: "+toWholeMinute(date,-1)+", "+toWholeMinute(date,-1).getTime());
System.out.println("curr whole minute, millies: "+toWholeMinute(date,0)+", "+toWholeMinute(date,0).getTime());
System.out.println("next whole minute, millies: "+toWholeMinute(date,1)+", "+toWholeMinute(date,1).getTime());
}
public static Date toWholeHour(Date d, int beforeOrAfter) {
Calendar c = new GregorianCalendar();
c.setTime(d);
c.add(Calendar.HOUR, beforeOrAfter);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
public static Date toWholeMinute(Date d, int beforeOrAfter) {
Calendar c = new GregorianCalendar();
c.setTime(d);
c.add(Calendar.MINUTE, beforeOrAfter);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
}
Avec Java 8, vous pouvez utiliser un Java.Time.LocaldateTetime ou ZonedDateTetime (TimeZone). Cela vous ferait commencer par arrondi à l'heure la plus proche: par exemple: "2019-05-21 13:41:50" code> serait imprimé comme < Code> 2019-05-21 14:00:00 code> p> p>
Pour arrondi à l'heure entière, je recommande localDateTime.trondaTo (chronounit.hours) code> (il se débarrassera également de toutes les nanosecondes).
@ Olev.v. Oui tu as raison. Dans ma réponse ci-dessus, le DateTimeformatter «s'en occuperait» aussi, car le résultat final est une chaîne. Je vais mettre à jour ma réponse!
Eh bien, la meilleure réponse est la plus simple
Solution possible ici Stackoverflow.com/Questtions/3553964/...