Sto fornendo la risposta moderna.
java.time e ThreeTenABP
Per ottenere la data corrente:
LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));
Questo ti dà un LocalDate
oggetto, che è quello che dovresti usare per mantenere una data nel tuo programma. A LocalDate
è una data senza ora del giorno.
Solo quando è necessario visualizzare la data a un utente, formattarla in una stringa adatta alle impostazioni internazionali dell'utente:
DateTimeFormatter userFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
System.out.println(today.format(userFormatter));
Quando ho eseguito questo frammento oggi nella locale inglese americano, l'output era:
13 luglio 2019
Se lo desideri più corto, specifica FormatStyle.MEDIUM
o anche FormatStyle.SHORT
. DateTimeFormatter.ofLocalizedDate
utilizza la locale di formattazione predefinita, quindi il punto è che fornirà un output adatto a quella locale, diverso per le diverse locali.
Se l'utente ha requisiti molto speciali per il formato di output, utilizzare una stringa di modello di formato:
DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
"d-MMM-u", Locale.forLanguageTag("ar-AE"));
13-يول -2019
Sto usando e raccomandando java.time, la moderna API di data e ora di Java. DateFormat
, SimpleDateFormat
, Date
E Calendar
utilizzato nella domanda e / o molte delle altre risposte, sono mal progettati e lunga superata. E java.time è molto più bello con cui lavorare.
Domanda: posso usare java.time su Android?
Sì, java.time funziona perfettamente su dispositivi Android più vecchi e più recenti. Richiede solo almeno Java 6 .
- In Java 8 e versioni successive e su dispositivi Android più recenti (dal livello API 26) l'API moderna è integrata.
- In Java 6 e 7 ottieni il ThreeTen Backport, il backport delle classi moderne (ThreeTen per JSR 310; vedi i link in basso).
- Su (vecchi) Android usa l'edizione Android di ThreeTen Backport. Si chiama ThreeTenABP. E assicurati di importare le classi di data e ora
org.threeten.bp
con i pacchetti secondari.
link
DateFormat
classe era OK quando questa domanda è stata posta nel 2011, quella classe e la sua sottoclasseSimpleDateFormat
erano sempre problematiche e ormai obsolete. Ti consiglio di non usarli e di cercare invece java.time, la moderna API di data e ora di Java .