2010-04-24 7 views
3

J'utilise un calendrier grégorien pour définir une date et une heure spécifiques à une application en utilisant la fonction set du calendrier grégorien. Quand j'utilise la méthode getTime(), elle me donne la bonne sortie mais quand j'essaie d'accéder à Hour_Of_Day et Minute, cela donne un mauvais numéro.Demander calendrier Gregorian pour l'heure de la journée en java

Calendar time = new GregorianCalendar(); 
    time.set(2010, Calendar.JANUARY, 1, 7, 20,0);  
    hour = time.HOUR_OF_DAY; 
    minute = time.MINUTE; 

L'heure donne une sortie de 11 et la minute donne une valeur de 12.
Toutes les suggestions sur la façon de résoudre ce problème? Merci

+0

Ceci est un bon. Est-ce toujours le retour 11? : -) Voici plus d'informations: http://java.sun.com/javase/6/docs/api/java/util/Calendar.html – OscarRyz

+0

FYI, les vieilles classes de date-heure gênantes telles que ['java.util. Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html), ['java.util.Calendar'] (https://docs.oracle.com /javase/9/docs/api/java/util/Calendar.html), et 'java.text.SimpleDateFormat' sont maintenant [legacy] (https://en.wikipedia.org/wiki/Legacy_system), supplantés par le [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) classes intégrées à Java 8 et Java 9. Voir [Tutoriel Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

Répondre

8

Votre code attribue simplement des heures/minutes aux constantes. Vous devez appeler Calendar.get (int):

hour = time.get(Calendar.HOUR_OF_DAY); 
minute = time.get(Calendar.MINUTE); 
+0

+1 me battre – OscarRyz

+0

Cela fonctionne parfaitement !! Merci –

0

tl; dr

myGregCal 
    .toZonedDateTime() // Convert from legacy class GregorianCalendar to modern ZonedDateTime. 
    .getHour()   // Get hour-of-day, 0-23. 

java.time

beaucoup plus facile avec les classes de java.time modernes qui remplacent les vieux héritage gênant classes de date-heure.

La classe ZonedDateTime représente un moment sur la ligne de temps dans un fuseau horaire spécifique avec une résolution de nanosecondes.

Convertissez à partir de votre GregorianCalendar en utilisant de nouvelles méthodes ajoutées aux anciennes classes.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ; 

Ou démarrez sans la classe GregorianCalendar.

ZoneId z = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.of(2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z); 

Si vous voulez travailler avec juste la partie temps de jour, un extrait LocalTime.

LocalTime localTime = zdt.toLocalTime() ; 

Si vous voulez vraiment les nombres entiers d'heures et de minutes, vous pouvez les interroger.

int hour = zdt.getHour(); 
int minute = zdt.getMinute(); 

A propos java.time

Le cadre java.time est construit en Java 8 et versions ultérieures. Ces classes supplantent les vieilles classes de date-heure legacy gênantes telles que java.util.Date, Calendar, & SimpleDateFormat. Le projet Joda-Time, maintenant en maintenance mode, conseille la migration vers les classes java.time.

Pour en savoir plus, voir le Oracle Tutorial. Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310.

Où obtenir les classes java.time?

  • Java SE 8 et SE 9 et plus tard
    • intégré.
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et SE 7
    • Une grande partie de la fonctionnalité de java.time est de retour à Java 6 Ported .
  • Android

Le projet ThreeTen-Extra java.time étend avec des classes supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.time. Vous pouvez trouver ici des classes utiles telles que Interval, YearWeek, YearQuarter et more.

Questions connexes