Java - Data e ora
Java fornisce l'estensione Date classe disponibile in java.util pacchetto, questa classe incapsula la data e l'ora correnti.
La classe Date supporta due costruttori come mostrato nella tabella seguente.
Sr.No. | Costruttore e descrizione |
---|---|
1 | Date( ) Questo costruttore inizializza l'oggetto con la data e l'ora correnti. |
2 | Date(long millisec) Questo costruttore accetta un argomento che equivale al numero di millisecondi trascorsi dalla mezzanotte del 1 gennaio 1970. |
Di seguito sono riportati i metodi della classe date.
Sr.No. | Metodo e descrizione |
---|---|
1 | boolean after(Date date) Restituisce true se l'oggetto Date che richiama contiene una data successiva a quella specificata da date, altrimenti restituisce false. |
2 | boolean before(Date date) Restituisce true se l'oggetto Date che richiama contiene una data precedente a quella specificata da date, altrimenti restituisce false. |
3 | Object clone( ) Duplica l'oggetto Date che richiama. |
4 | int compareTo(Date date) Confronta il valore dell'oggetto richiamante con quello di date. Restituisce 0 se i valori sono uguali. Restituisce un valore negativo se l'oggetto che richiama è precedente alla data. Restituisce un valore positivo se l'oggetto che richiama è successivo alla data. |
5 | int compareTo(Object obj) Funziona in modo identico a compareTo (Date) se obj è della classe Date. In caso contrario, genera un'eccezione ClassCastException. |
6 | boolean equals(Object date) Restituisce true se l'oggetto Date che richiama contiene la stessa ora e data di quella specificata da date, altrimenti restituisce false. |
7 | long getTime( ) Restituisce il numero di millisecondi trascorsi dal 1 gennaio 1970. |
8 | int hashCode( ) Restituisce un codice hash per l'oggetto invocante. |
9 | void setTime(long time) Imposta l'ora e la data come specificato da time, che rappresenta il tempo trascorso in millisecondi dalla mezzanotte del 1 gennaio 1970. |
10 | String toString( ) Converte l'oggetto Date che richiama in una stringa e restituisce il risultato. |
Ottenere la data e l'ora correnti
Questo è un metodo molto semplice per ottenere la data e l'ora correnti in Java. È possibile utilizzare un semplice oggetto Date con il metodo toString () per stampare la data e l'ora correnti come segue:
Esempio
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
Questo produrrà il seguente risultato:
Produzione
on May 04 09:51:52 CDT 2009
Confronto delle date
Di seguito sono riportati i tre modi per confrontare due date:
È possibile utilizzare getTime () per ottenere il numero di millisecondi trascorsi dalla mezzanotte del 1 gennaio 1970 per entrambi gli oggetti e quindi confrontare questi due valori.
È possibile utilizzare i metodi before (), after () e equals (). Poiché il 12 del mese viene prima del 18, ad esempio, new Date (99, 2, 12) .before (new Date (99, 2, 18)) restituisce true.
È possibile utilizzare il metodo compareTo (), definito dall'interfaccia Comparable e implementato da Date.
Formattazione della data utilizzando SimpleDateFormat
SimpleDateFormat è una classe concreta per la formattazione e l'analisi delle date in modo sensibile alle impostazioni locali. SimpleDateFormat consente di iniziare scegliendo qualsiasi modello definito dall'utente per la formattazione della data e dell'ora.
Esempio
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
Questo produrrà il seguente risultato:
Produzione
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
Codici di formato DateFormat semplici
Per specificare il formato dell'ora, utilizzare una stringa del modello dell'ora. In questo modello, tutte le lettere ASCII sono riservate come lettere del modello, che sono definite come segue:
Personaggio | Descrizione | Esempio |
---|---|---|
G | Designatore di epoca | ANNO DOMINI |
y | Anno in quattro cifre | 2001 |
M | Mese nell'anno | Luglio o 07 |
d | Giorno in mese | 10 |
h | Ora AM / PM (1 ~ 12) | 12 |
H | Ora nel giorno (0 ~ 23) | 22 |
m | Minuto in ora | 30 |
S | Secondo in minuto | 55 |
S | Millisecondo | 234 |
E | Giorno in settimana | martedì |
D | Giorno dell'anno | 360 |
F | Giorno della settimana nel mese | 2 (secondo mercoledì di luglio) |
w | Settimana nell'anno | 40 |
W | Settimana al mese | 1 |
un | Indicatore AM / PM | PM |
K | Ora nel giorno (1 ~ 24) | 24 |
K | Ora AM / PM (0 ~ 11) | 10 |
z | Fuso orario | Ora solare orientale |
' | Fuga per il testo | Delimitatore |
" | Virgoletta singola | " |
Formattazione della data utilizzando printf
La formattazione di data e ora può essere eseguita molto facilmente utilizzando printfmetodo. Utilizzi un formato di due lettere, a partire dat e termina con una delle lettere della tabella come mostrato nel codice seguente.
Esempio
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
}
Questo produrrà il seguente risultato:
Produzione
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Sarebbe un po 'sciocco se dovessi fornire la data più volte per formattare ogni parte. Per questo motivo, una stringa di formato può indicare l'indice dell'argomento da formattare.
L'indice deve seguire immediatamente% e deve essere terminato da $.
Esempio
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
Questo produrrà il seguente risultato:
Produzione
Due date: February 09, 2004
In alternativa, puoi usare il flag <. Indica che lo stesso argomento della specifica di formato precedente deve essere utilizzato di nuovo.
Esempio
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display formatted date
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
Questo produrrà il seguente risultato:
Produzione
Due date: February 09, 2004
Caratteri di conversione di data e ora
Personaggio | Descrizione | Esempio |
---|---|---|
c | Data e ora complete | Lunedì 04 maggio 09:51:52 CDT 2009 |
F | Data ISO 8601 | 2004-02-09 |
D | Data formattata USA (mese / giorno / anno) | 02/09/2004 |
T | 24 ore su 24 | 18:05:19 |
r | 12 ore | 18:05:19 |
R | 24 ore su 24, senza secondi | 18:05 |
Y | Anno a quattro cifre (con zeri iniziali) | 2004 |
y | Ultime due cifre dell'anno (con zeri iniziali) | 04 |
C | Prime due cifre dell'anno (con zeri iniziali) | 20 |
B | Nome completo del mese | febbraio |
b | Nome del mese abbreviato | Feb |
m | Mese a due cifre (con zeri iniziali) | 02 |
d | Giorno a due cifre (con zeri iniziali) | 03 |
e | Giorno a due cifre (senza zeri iniziali) | 9 |
UN | Nome completo del giorno della settimana | Lunedi |
un | Nome abbreviato del giorno della settimana | Lun |
j | Giorno dell'anno a tre cifre (con zeri iniziali) | 069 |
H | Ora a due cifre (con zeri iniziali), compresa tra 00 e 23 | 18 |
K | Ora a due cifre (senza zeri iniziali), compresa tra 0 e 23 | 18 |
io | Ora a due cifre (con zeri iniziali), compresa tra 01 e 12 | 06 |
l | Ora a due cifre (senza zeri iniziali), compresa tra 1 e 12 | 6 |
M | Minuti a due cifre (con zeri iniziali) | 05 |
S | Secondi a due cifre (con zeri iniziali) | 19 |
L | Millisecondi a tre cifre (con zeri iniziali) | 047 |
N | Nanosecondi di nove cifre (con zeri iniziali) | 047000000 |
P | Indicatore maiuscolo del mattino o del pomeriggio | PM |
p | Indicatore mattutino o pomeridiano minuscolo | pm |
z | RFC 822 offset numerico dal GMT | -0800 |
Z | Fuso orario | PST |
S | Secondi da 1970-01-01 00:00:00 GMT | 1078884319 |
Q | Millisecondi da 1970-01-01 00:00:00 GMT | 1078884319047 |
Ci sono altre classi utili relative a Data e ora. Per ulteriori dettagli, fare riferimento alla documentazione di Java Standard.
Analisi delle stringhe nelle date
La classe SimpleDateFormat ha alcuni metodi aggiuntivi, in particolare parse (), che cerca di analizzare una stringa in base al formato memorizzato nell'oggetto SimpleDateFormat specificato.
Esempio
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
Un'esecuzione di esempio del programma precedente produrrebbe il seguente risultato:
Produzione
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Dormire per un po '
Puoi dormire per qualsiasi periodo di tempo da un millisecondo fino alla durata del tuo computer. Ad esempio, il seguente programma dormirà per 3 secondi:
Esempio
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Questo produrrà il seguente risultato:
Produzione
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
Misurazione del tempo trascorso
A volte, potrebbe essere necessario misurare il punto nel tempo in millisecondi. Quindi riscriviamo ancora una volta l'esempio precedente -
Esempio
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
Questo produrrà il seguente risultato:
Produzione
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993
Classe GregorianCalendar
GregorianCalendar è un'implementazione concreta di una classe Calendar che implementa il normale calendario gregoriano con cui hai familiarità. Non abbiamo discusso della classe Calendar in questo tutorial, puoi cercare la documentazione Java standard per questo.
Il getInstance( )Il metodo di Calendar restituisce un GregorianCalendar inizializzato con la data e l'ora correnti nella lingua e nel fuso orario predefiniti. GregorianCalendar definisce due campi: AD e BC. Questi rappresentano le due epoche definite dal calendario gregoriano.
Esistono anche diversi costruttori per oggetti GregorianCalendar:
Sr.No. | Costruttore e descrizione |
---|---|
1 | GregorianCalendar() Costruisce un GregorianCalendar predefinito utilizzando l'ora corrente nel fuso orario predefinito con le impostazioni internazionali predefinite. |
2 | GregorianCalendar(int year, int month, int date) Costruisce un GregorianCalendar con la data specificata impostata nel fuso orario predefinito con le impostazioni internazionali predefinite. |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) Costruisce un GregorianCalendar con la data e l'ora specificate impostate per il fuso orario predefinito con le impostazioni internazionali predefinite. |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) Costruisce un GregorianCalendar con la data e l'ora specificate impostate per il fuso orario predefinito con le impostazioni internazionali predefinite. |
5 | GregorianCalendar(Locale aLocale) Costruisce un GregorianCalendar basato sull'ora corrente nel fuso orario predefinito con la locale specificata. |
6 | GregorianCalendar(TimeZone zone) Costruisce un GregorianCalendar basato sull'ora corrente nel fuso orario specificato con la locale predefinita. |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) Costruisce un GregorianCalendar basato sull'ora corrente nel fuso orario specificato con la locale specificata. |
Ecco l'elenco di pochi metodi di supporto utili forniti dalla classe GregorianCalendar:
Sr.No. | Metodo e descrizione |
---|---|
1 | void add(int field, int amount) Aggiunge la quantità di tempo specificata (con segno) al campo dell'ora specificato, in base alle regole del calendario. |
2 | protected void computeFields() Converte UTC in millisecondi in valori di campo ora. |
3 | protected void computeTime() Sostituisce il calendario Converte i valori del campo ora in UTC in millisecondi. |
4 | boolean equals(Object obj) Confronta questo GregorianCalendar con un riferimento a un oggetto. |
5 | int get(int field) Ottiene il valore per un determinato campo temporale. |
6 | int getActualMaximum(int field) Restituisce il valore massimo che questo campo potrebbe avere, data la data corrente. |
7 | int getActualMinimum(int field) Restituisce il valore minimo che questo campo potrebbe avere, data la data corrente. |
8 | int getGreatestMinimum(int field) Restituisce il valore minimo più alto per il campo specificato, se varia. |
9 | Date getGregorianChange() Ottiene la data di modifica del calendario gregoriano. |
10 | int getLeastMaximum(int field) Restituisce il valore massimo più basso per il campo specificato se varia. |
11 | int getMaximum(int field) Restituisce il valore massimo per il campo specificato. |
12 | Date getTime() Ottiene l'ora corrente di questo calendario. |
13 | long getTimeInMillis() Ottiene l'ora corrente di questo calendario come long. |
14 | TimeZone getTimeZone() Ottiene il fuso orario. |
15 | int getMinimum(int field) Restituisce il valore minimo per il campo specificato. |
16 | int hashCode() Esegue l'override di hashCode. |
17 | boolean isLeapYear(int year) Determina se l'anno specificato è un anno bisestile. |
18 | void roll(int field, boolean up) Aggiunge o sottrae (su / giù) una singola unità di tempo nel campo temporale specificato senza modificare i campi più grandi. |
19 | void set(int field, int value) Imposta il campo dell'ora con il valore dato. |
20 | void set(int year, int month, int date) Imposta i valori per i campi anno, mese e data. |
21 | void set(int year, int month, int date, int hour, int minute) Imposta i valori per i campi anno, mese, data, ora e minuto. |
22 | void set(int year, int month, int date, int hour, int minute, int second) Imposta i valori per i campi anno, mese, data, ora, minuti e secondi. |
23 | void setGregorianChange(Date date) Imposta la data di modifica di GregorianCalendar. |
24 | void setTime(Date date) Imposta l'ora corrente di questo calendario con la data specificata. |
25 | void setTimeInMillis(long millis) Imposta l'ora corrente di questo calendario dal valore long specificato. |
26 | void setTimeZone(TimeZone value) Imposta il fuso orario con il valore del fuso orario specificato. |
27 | String toString() Restituisce una rappresentazione di stringa di questo calendario. |
Esempio
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};
int year;
// Create a Gregorian calendar initialized
// with the current date and time in the
// default locale and timezone.
GregorianCalendar gcalendar = new GregorianCalendar();
// Display current time and date information.
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// Test if the current year is a leap year
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
}else {
System.out.println("The current year is not a leap year");
}
}
}
Questo produrrà il seguente risultato:
Produzione
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
Per un elenco completo delle costanti disponibili nella classe Calendar, è possibile fare riferimento alla documentazione Java standard.