Java SimpleDateFormat – Formato Data Java

Introduzione

Le classi SimpleDateFormat e DateFormat di Java vengono utilizzate per la formattazione delle date. Sono principalmente utilizzate quando è necessario visualizzare o utilizzare la funzionalità di data e ora di Java. Entrambe queste classi sono presenti nel pacchetto com.text.

Java DateFormat

  • DateFormat è utilizzato per formattare una data in una Stringa in base alla località specifica fornita in input.
  • La località viene utilizzata per specificare la regione e la lingua al fine di rendere il codice più adatto all’utente.
  • Il modo di scrivere la data è diverso in diverse regioni del mondo. Ad esempio, il 31 dicembre 2017 verrà scritto in India come 31-12-2017, ma negli Stati Uniti d’America verrà scritto come 12-31-2017.
  • Le classi DateFormat non sono sincronizzate, si consiglia di creare un’istanza separata per ogni thread.

A DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

Nota: Il costruttore Locale(String, String) è deprecato dalla versione 19

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

Il metodo getDateInstance di DateFormat richiede due parametri di input. Il primo parametro specifica il DateFormat da utilizzare e il secondo parametro è la località.

Utilizzando format

La classe DateFormat ha un metodo format che si occupa della formattazione.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Questo codice formatta la data nella lingua francese (fr) e nella regione Francia (FR):

Output
3 janv. 2018

Utilizzando getTimeInstance()

Per creare un’istanza di DateFormat stiamo utilizzando il metodo getDateInstance().

Per eseguire una formattazione dell’ora, abbiamo bisogno di un’istanza dell’ora. Utilizzeremo il metodo getTimeInstance() per ottenere un’istanza dell’ora.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Questo codice formatta l’ora nella lingua francese (fr) e nella regione Francia (FR):

Output
11:03:01

Java SimpleDateFormat

SimpleDateFormat è simile a DateFormat. L’unico grande differenza tra loro è che SimpleDateFormat può essere utilizzato per la formattazione (conversione da Date a String) e per l’analisi (String a conversione Date) con supporto per la lingua, mentre DateFormat non ha il supporto per la lingua. DateFormat è una classe astratta che fornisce un supporto di base per la formattazione e l’analisi delle date. SimpleDateFormat è la classe concreta che estende la classe DateFormat.

SimpleDateFormat può essere creato utilizzando il costruttore di SimpleDateFormat. Il costruttore è un costruttore parametrizzato e richiede un Stringa modello come parametro.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

La Stringa modello è il modello che verrà utilizzato per formattare una data e l’output verrà generato in quel modello come ” MM-dd-yyyy“.

Modelli

Diamo un’occhiata alla sintassi del modello che dovrebbe essere utilizzata per il modello di formattazione.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

Alcune lettere dovrebbero essere utilizzate in quantità diverse per risultati diversi, ad esempio per il mese:

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

Esempi

Diamo ora un’occhiata a alcuni esempi per diversi formati di data e ora.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

Utilizzando SimpleDateFormat()

Per analizzare una data è necessario creare un’istanza di SimpleDateFormat utilizzando il costruttore e poi utilizzare il metodo format():

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Questo codice produrrà “MM-dd-yyyy”:

Output
01-02-2018

Questo pattern produce “mese nell’anno”, “giorno nel mese” e “anno”. Il tipo di carattere (e la maiuscola) e la quantità di caratteri contribuiscono alla stringa. Il mese è rappresentato da due cifre, il giorno da due cifre e l’anno da quattro cifre.

Questo codice ha visualizzato la data “2 gennaio 2018” come “01-02-2018”.

Per analizzare l’ora, è necessario modificare il pattern durante la creazione dell’istanza di SimpleDateFormat.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Questo codice produrrà “HH:mm:ss.SSSZ”:

Output
13:03:15.454+0530

Questo pattern produce “ore”, “minuti”, “secondi”, “millisecondi” e “offset del fuso orario in ore (pattern RFC)”.

Questo codice ha visualizzato l’ora come “13:03:15.454+0530”.

Utilizzando parse()

Il parsing è la conversione di una stringa in un’istanza `java.util.Date`. Possiamo analizzare una stringa in un’istanza di data utilizzando il metodo `parse()` della classe SimpleDateFormat. Per analizzare una stringa in una data abbiamo bisogno di un’istanza della classe SimpleDateFormat e di un modello di stringa come input per il costruttore della classe.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

Questo produrrà una data (`12-01-2018`) senza un’ora specificata:

Output
Sat Dec 01 00:00:00 IST 2018

Ora vediamo un esempio di `SimpleDateFormat` per analizzare l’ora.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

Questo produrrà un’ora (`22:00:03`) senza una data specificata:

Output
Thu Jan 01 22:00:03 IST 1970

Poiché non abbiamo specificato alcuna data, il programma considera l’epoca come data (cioè `01-gen-1970`).

Utilizzo di `Locale`

Abbiamo lavorato con `Locale` come parte del `DateFormat` e abbiamo visto che le località vengono utilizzate in base alle regioni.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

Questo codice formatta l’ora corrente nella lingua francese (`fr`) e nella regione di Francia (`FR`):

Output
mardi janvier 2018 14:51:02.354+0530

Il giorno e il mese sono nominati in francese in base alla `Locale` fornita in input – `mardi` è “Martedì” e `janvier` è “Gennaio”.

Conclusione

In questo articolo hai appreso su SimpleDateFormat e DateFormat di Java.

Riferimento:

Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format