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.