Chiedi calendario gregoriano per ora del giorno in java
-
01-10-2019 - |
Domanda
Io sto usando un Calendario Gregoriano di fissare una data e ora specifiche per un'applicazione che utilizza la funzione di set del Calendario Gregoriano. Quando uso il metodo di getTime (), mi dà l'uscita giusta tuttavia quando provo ad accedere alla Hour_Of_Day e Minute dà un numero sbagliato.
Calendar time = new GregorianCalendar();
time.set(2010, Calendar.JANUARY, 1, 7, 20,0);
hour = time.HOUR_OF_DAY;
minute = time.MINUTE;
L'ora fornisce una potenza di 11 e al minuto fornisce un valore di un 12.
Qualche suggerimento su come risolvere questo problema?
Grazie
Soluzione
Il codice è solo assegnando ora / minuto costanti. È necessario chiamare Calendar.get (int):
hour = time.get(Calendar.HOUR_OF_DAY);
minute = time.get(Calendar.MINUTE);
Altri suggerimenti
tl; dr
myGregCal
.toZonedDateTime() // Convert from legacy class GregorianCalendar to modern ZonedDateTime.
.getHour() // Get hour-of-day, 0-23.
java.time
Molto più facile con le moderne classi java.time che sostituiscono quelle vecchie classi legacy data in tempo fastidiosi.
Il ZonedDateTime
classe rappresenta un momento sulla timeline di una determinata fuso orario con una risoluzione di nanosecondi.
Converti dal GregorianCalendar
utilizzando nuovi metodi aggiunti alle vecchie classi.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
o avviare fresca, senza la classe GregorianCalendar
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( 2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z );
Se si desidera lavorare con solo la parte relativa all'ora del giorno, estrarre una LocalTime
.
LocalTime localTime = zdt.toLocalTime() ;
Se si vuole veramente i numeri interi di ore e minuti, si può interrogare per quelli.
int hour = zdt.getHour();
int minute = zdt.getMinute();
A proposito di java.time
Il java.time quadro è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidioso legacy classi data-time come java.util.Date
, Calendar
, e SimpleDateFormat
.
Il Joda Time progetto, ora in modalità manutenzione , consiglia migrazione al java.time classi .
Per ulteriori informazioni, vedere la Oracle Tutorial . E cercare Stack Overflow per molti esempi e spiegazioni. Le specifiche sono JSR 310 .
Dove ottenere le classi java.time?
- Java SE 8 e SE 9 e più tardi
- Built-in.
- Parte delle API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità minori e correzioni.
- Java SE 6 e SE 7
- La maggior parte delle funzionalità java.time è di back-porting per Java 6 & 7 a ThreeTen-Backport .
- Android
- I adatta ThreeTenABP del progetto < em> ThreeTen-Backport (di cui sopra) per Android in particolare.
- Come utilizzare ThreeTenABP ... .
Il ThreeTen-Extra progetto estende java.time con classi aggiuntive. Questo progetto è un proving terreno per eventuali future integrazioni java.time. Si possono trovare alcune classi utili, come per esempio Interval
, YearWeek
, YearQuarter
, e informazioni .