Question

J'utilise un calendrier grégorien pour fixer une date et une heure spécifiques à une application utilisant la fonction de réglage du calendrier grégorien. Quand j'utilise la méthode getTime (), il me donne la sortie droite mais lorsque je tente d'accéder au HOUR_OF_DAY et Minute lui donne un mauvais numéro.

    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 d'un de 12.
Toutes les suggestions sur la façon de résoudre ce problème? Merci

Était-ce utile?

La solution

Votre code est juste assignant heure / minute à des constantes. Vous devez appeler Calendar.get (int):

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

Autres conseils

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 classes date temps anciens vieux gênants.

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

Convertir de votre GregorianCalendar en utilisant de nouvelles méthodes ajoutées aux anciennes classes.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

Ou commencer frais 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 du temps de la journée, extraire un LocalTime.

LocalTime localTime = zdt.toLocalTime() ;

Si vous voulez vraiment les nombres entiers d'heures et minutes, vous pouvez interroger pour ceux-ci.

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

A propos de java.time

Le java.time cadre est construit en Java 8 et versions ultérieures. Ces classes supplantent la problématique vieux classes date de temps de hérités tels que java.util.Date , Calendar , et SimpleDateFormat .

Le projet du Joda-Time, maintenant mode maintenance , conseille la migration vers la page java.time classes.

Pour en savoir plus, consultez le Oracle Tutoriel . Et la recherche Stack Overflow pour de nombreux exemples et explications. Spécification est JSR 310 .

Où obtenir les classes java.time?

Le projet ThreeTen-Extra étend java.time avec des classes supplémentaires. Ce projet est une proving terrain pour des ajouts futurs possibles à java.time. Vous trouverez peut-être des classes utiles ici, comme Interval , YearWeek , YearQuarter et plus .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top