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

È stato utile?

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?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top