Pregunta

Estoy usando un calendario gregoriano para fijar una fecha y hora específicas a una aplicación mediante la función de conjunto del calendario gregoriano. Cuando se utiliza el método getTime (), me da la salida correcta sin embargo cuando intento acceder a la HOUR_OF_DAY y los minutos que le da un número equivocado.

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

La hora da una salida de 11 y el minuto da un valor A de 12.
Alguna sugerencia en como arreglar esto? Gracias

¿Fue útil?

Solución

Su código es simplemente asignando hora / minuto para las constantes. Es necesario llamar Calendar.get (int):

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

Otros consejos

tl; dr

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

java.time

Mucho más fácil con las modernas clases java.time que los sustituyen legado antiguo clases de fecha y hora problemáticos.

El ZonedDateTime clase representa una momento en la línea de tiempo en una zona horaria específica con una resolución de nanosegundos.

Convertir de su GregorianCalendar utilizando nuevos métodos añadidos a las antiguas clases.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

O empezar de nuevo sin la clase GregorianCalendar.

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

Si desea trabajar con sólo la parte de la hora del día, extraiga una LocalTime.

LocalTime localTime = zdt.toLocalTime() ;

Si realmente desea que los números enteros de horas y minutos, se puede interrogar para aquellos.

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

Acerca de java.time

El java.time marco está construido en Java 8 y versiones posteriores. Estas clases suplantar a la problemática de edad legado clases de fecha y hora como java.util.Date , Calendar , y SimpleDateFormat .

El proyecto Joda-Time , ahora en el modo de mantenimiento , aconseja migración a la java.time clases .

Para obtener más información, consulte la Oracle Tutorial . Y la búsqueda de desbordamiento de pila durante muchos ejemplos y explicaciones. Especificación es JSR 310 .

¿Dónde obtener las clases java.time?

El ThreeTen-Extra Proyecto extiende java.time con clases adicionales. Este proyecto es un proving terreno para posibles futuras adiciones a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter , y más .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top