7
votes

À Java, comment pouvons-nous faire du temps à l'heure et à la minute la plus proche?

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


1 commentaires

Solution possible ici Stackoverflow.com/Questtions/3553964/...


6 Réponses :


1
votes

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.


2 commentaires

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.



22
votes

Pour les opérations de calendrier, vous devez utiliser une classe de calendrier. Dans votre cas, vous feriez quelque chose comme ceci: xxx

et le résultat: xxx


3 commentaires

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 sur 0 , pas seulement secondes (et minutes).


Euh, vous avez "avez" utiliser la classe calendrier ? Non. Vous pouvez faire cette logique RAW à l'aide de la primaire long . Par exemple: long maintenant = System.Currenttimemillis (); long arrondi = maintenant - maintenant à% 60000; une fois que vous avez longtemps, vous pouvez faire ce que vous voulez.



0
votes

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.


1 commentaires

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.



0
votes
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();
    }

}

0 commentaires

4
votes

Avec Java 8, vous pouvez utiliser un Java.Time.LocaldateTetime ou ZonedDateTetime (TimeZone). Cela vous ferait commencer par arrondi à l'heure la plus proche: xxx

par exemple: "2019-05-21 13:41:50" serait imprimé comme < Code> 2019-05-21 14:00:00


2 commentaires

Pour arrondi à l'heure entière, je recommande localDateTime.trondaTo (chronounit.hours) (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!



0
votes

Eh bien, la meilleure réponse est la plus simple xxx


0 commentaires