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 unaStringa
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 come31-12-2017
, ma negli Stati Uniti d’America verrà scritto come12-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
):
Output3 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
):
Output11: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
”:
Output01-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
”:
Output13: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:
OutputSat 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:
OutputThu 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`):
Outputmardi 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