Pedir calendario gregoriano para la hora del día en Java
-
01-10-2019 - |
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
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?
- Java SE 8 y SE 9 y más tarde
- Built-in.
- Parte de la API estándar de Java con una aplicación incluida.
- Java 9 añade algunas características menores y correcciones.
- Java SE 6 y SE 7
- Gran parte de la funcionalidad de back-java.time está portado a Java 6 y 7 en ThreeTen-Backport .
- Android
- ThreeTenABP proyectos < em> ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- ¿Cómo utilizar ThreeTenABP ... .
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 .