English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Analisi approfondita di java.util.Calendar

java.util.Calendar

In Java ci sono diversi tipi di classi per la gestione del tempo, ma poiché Date è stato gradualmente disattivato, i suoi metodi sono stati lentamente segnati con una croce, e le funzioni rimanenti sono già implementate in Calendar, mentre la sottoclasse GregorianCalendar di Calendar è troppo approfondita nello studio dei calendari speciali, che non usiamo spesso. Possiamo credere che la classe Calendar sarà il tipo di tempo principale in futuro, e ora vediamo insieme i dettagli della classe Calendar, e se ci sono errori, tutti sono i benvenuti a correggerli.

(一) Creazione dell'istanza

La classe Calendar è astratta e non può essere istanziata, quindi ci sono due modi per ottenere un'istanza di calendario:

 Calendar calendar = Calendar.getInstance(TimeZone zone , Locale locale); 

Chiamando il metodo getInstance, si seleziona la Timezone e la Locale predefinite, restituendo così un calendario. È anche possibile aggiungere parametri Timezone o Locale per selezionare la regione geografica, per i dettagli vedere i pacchetti java.util.Timezone e java.util.Locale. Di solito, l'ora predefinita è l'ora comune che non abbiamo bisogno di modificare.

Inoltre, c'è un altro metodo per creare un'istanza. Non c'è nulla di straordinario, è un vecchio schema java di utilizzare sottoclassi per creare istanze. L'unica sottoclasse di Calendar è GregorianCalendar, che significa calendario gregoriano in italiano, questo GregorianCalendar ne parleremo in modo più dettagliato in seguito. Un altro modo per creare un'istanza è il seguente:

Calendar calendar = new GregorianCalendar();

(二) Variabili di classe

Le variabili di Calendar sono基本上都用final限定,这些变量将年份,月份,小时,上下午等等所有的时间内容全部包括了。百度上一找一大堆,这种具体要用的时候最好还是看API,我这里姑且简要粘贴一份:

calendar.get(Calendar.YEAR); 
calendar.get(Calendar.MONTH); // Il mese inizia da 0 
calendar.get(Calendar.DAY_OF_MONTH);  
calendar.get(Calendar.DAY_OF_WEEK); 
calendar.get(Calendar.WEEK_OF_YEAR); 
calendar.get(Calendar.WEEK_OF_MONTH); 
calendar.get(Calendar.HOUR);    // 12 ore
calendar.get(Calendar.HOUR_OF_DAY); // 24 ore 
calendar.get(Calendar.MINUTE); 
calendar.get(Calendar.SECOND); 
calendar.get(Calendar.MILLISECOND); 

Questi valori sono variabili finali nel codice sorgente di JDK, poiché sono int static final, significa che queste variabili hanno un valore iniziale di tipo int. Effettivamente, la classe Calendar assegna numeri a queste variabili in sequenza, come giudizio di intervallo per i parametri delle funzioni. Pertanto, è possibile che si verifichi questo tipo di situazione, ad esempio il seguente codice:

System.out.println(Calendar.DAY_OF_MONTH);

Il valore di output è 5, anche se oggi non è il 5° giorno del mese. Questo è un errore, in realtà stai outputtando il valore iniziale di DAY_OF_MONTH della classe, se vuoi rappresentare la data corrente del mese, devi creare un'istanza dell'oggetto della classe, ma negli oggetti della classe in cui i variabili possono essere direttamente chiamate, questo errore è ancora abbastanza comune. Il metodo corretto dovrebbe utilizzare il metodo get() per ottenere (calendar è l'oggetto di esempio):

System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

(3) funzioni compareTo() after() before()

compareTo(Calendar othercalendar), restituisce un valore int, se l'oggetto dell'ora è dopo l'ora del parametro restituisce un numero maggiore di 0, altrimenti restituisce un numero minore di 0, specialmente se le ore sono le stesse restituisce 0. Penso che l'implementazione di questo metodo potrebbe essere direttamente il risultato della differenza tra i millisecondi (mi sembra che la mia supposizione abbia molto senso...), la differenza in millisecondi viene utilizzata come valore di ritorno.

after(Calendar othercalendar), before(Calendar othercalendar), queste funzioni sono anche facili da indovinare, restituiscono valori booleani, la funzione after() restituisce un valore positivo se l'ora è dopo il parametro, la funzione before() restituisce un valore positivo se l'ora è prima del parametro.

Calendar calendar = Calendar.getInstance();
Calendar calendarother = Calendar.getInstance();
calendarother.add(Calendar.DATE, -20);
if(calendar.after(calendarother))
  System.out.println("after");
calendarother.add(Calendar.DATE, 100);
if(calendar.before(calendarother))
  System.out.println("prima");
if(calendar.compareTo(calendarother)>0)
    System.out.println(calendar.getTime()+">"+calendarother.getTime());

Il risultato è:

dopo 
prima 
Sun Jan 11 21:19:49 GMT+08:00 1970>Thu Jan 01 00:00:00 GMT+08:00 1970

(IV) Funzioni get() add() set() setTime()

Nell'esempio sopra è stato utilizzato il metodo add(int field, int amount), questa funzione è molto potente e può aggiungere o sottrarre il valore del primo parametro, modificando così il valore corrispondente dell'entità calendario.

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
System.out.println(calendar.getTime());//Il risultato è la data di ieri, tutti gli altri rimangono invariati

get(int field) non c'è molto da dire, inserisci il valore desiderato e visualizzalo, è così semplice. A proposito, getTimeInMillis() restituisce il numero di millisecondi, che viene utilizzato molto nelle applicazioni reali.

Il metodo set() ha molti modi di inserimento di parametri, se è ben scritto, è facile da capire. La funzione setTime() inserisce un oggetto Date e restituisce un calendario configurato secondo la data di Date. È anche importante notare che i mesi iniziano da 0, quindi impostare il mese a 0 significa gennaio, impostare a 1 significa febbraio, il primo giorno della settimana è domenica, il settimo giorno è sabato.

calendar.get(Calendar.DATE);
calendar.getTimeInMillis();
calendar.set(field, value);
calendar.set(year, month, date);//月份是从0开始,下同
calendar.set(year, month, date, hourOfDay, minute);
calendar.set(year, month, date, hourOfDay, minute, second);
calendar.setTime(Date date);//Oggetto Date

(Cinque) Funzioni getTime() clear() isSet()

La funzione getTime() restituisce un tempo, più o meno in questo formato

Sun Jan 11 21:19:49 GMT+08:00 1970

Puoi usarlo per formattare il tempo nel modo che preferisci, dettagli vedi il mio altro blog, questa funzione non ha molti punti negativi. La funzione clear() senza parametri svuota tutti i variabili dell'oggetto, il tempo svuotato viene direttamente riportato all'originale, diventa

Thu Jan 01 00:00:00 GMT+08:00 1970

clear() può anche includere un parametro int field, che indica di cancellare solo questo valore:

calendar.clear(Calendar.YEAR);
System.out.println(calendar.getTime());

L'anno visualizzato nell'ultimo codice è il 1970 (non è possibile cancellarlo in 0000...), gli altri possono essere raggruppati in questo modo.
Il metodo isSet() determina se il campo del calendario ha già impostato un valore, alcuni valori possono essere impostati a causa della chiamata al metodo get, molte volte, una volta effettuata l'inizializzazione, molti valori sono già impostati, ma come funzione che restituisce un valore booleano, la verifica dovrebbe ancora avere un effetto.

if(calendar.isSet(Calendar.DATE))

(Sei) Sommario

La classe Calendar, come suggerisce il nome, può implementare un calendario, operare su di esso e ha funzionalità piuttosto complete. Se hai bisogno solo di un tempo, questa classe non è necessariamente più veloce di new Date(), ma per alcune operazioni dettagliate, ci sono ancora molti punti da imparare.

Grazie per aver letto, spero che possa aiutarti, grazie per il supporto al nostro sito!

Ti potrebbe interessare