Rappresentare le Date in Java con SimpleDateFormat

DOMANDA:

Come posso rappresentare le date in Java?



RISPOSTA:

Java ha una molteplicità di oggetti che gestiscono le date, qualcuno con un funzionamento intuitivo, altri meno. Un tentativo di semplificare la loro gestione è fornito dalla classe SimpleDateFormat (java.text.SimpleDateFormat).

Vediamo come funziona con il seguente esempio SimpleDateFormatTest:
package date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class SimpleDateFormatTest {
  public static void main(String[] args) throws ParseException {
  
    SimpleDateFormat sdf = new SimpleDateFormat(); // creo l'oggetto
  
    // primo pattern: 2009, 12, 09
    sdf.applyPattern("yyyy, MM, dd");
    Date data = sdf.parse("2009, 12, 9");
    String dataStringa = sdf.format(data);
    System.out.println(dataStringa);  
        
    // modifico il pattern: 2009-12-09
    sdf.applyPattern("yyyy-MM-dd");
    dataStringa = sdf.format(data);
    System.out.println(dataStringa);  
        
    // settiamo il formato data (pattern) nel costruttore: 080413231216100
    sdf = new SimpleDateFormat("ddMMyyHHmmssSS");
    dataStringa = sdf.format(new Date()); // data corrente (8 aprile 2013)
    System.out.println(dataStringa);
  
    // pattern: 08-04-13-23.12.16100
    sdf.applyPattern("dd-MM-yy-HH:mm:ssSS");
    dataStringa = sdf.format(new Date());
    System.out.println(dataStringa); 
  
    // pattern: 08/04/2013
    sdf = new SimpleDateFormat("dd/MM/yyyy");
    dataStringa = sdf.format(new Date());
    System.out.println(dataStringa); 
  
    // settiamo la data in inglese: 01 June 1990
    data = sdf.parse("01/06/1990");
    Locale.setDefault(Locale.ENGLISH);
    sdf = new SimpleDateFormat("dd MMMM yyyy"); //necessario dichiarare un nuovo oggetto per applicare i settaggi di localizzazione
    dataStringa = sdf.format(data);
    System.out.println(dataStringa); 
  
    // e in italiano: 01 giugno 1990
    Locale.setDefault(Locale.ITALIAN);
    sdf = new SimpleDateFormat("dd MMMM yyyy"); 
    dataStringa = sdf.format(data);
    System.out.println(dataStringa); 
  }
}
Il codice è ricco di commenti auto-esplicativi, ma vediamo lo stesso l'output fornito dal programma:
2009, 12, 09
2009-12-09
080413233647979
08-04-13-23:36:47979
08/04/2013
01 June 1990
01 giugno 1990

Ecco una breve tabella riepilogativa su come comporre i pattern:
Tabella pattern SimpleDateFormat
Per inserire del testo non interpretato come pattern è sufficiente metterlo tra singoli apici.

NOTA: SimpleDateFormat non è ThreadSafe, quindi non è sincronizzato. La raccomandazione è quindi di creare ciascuna istanza SimpleDateFormat in Thread separati oppure di sincronizzarne esternamente l'accesso.

Un metodo alternativo a SimpleDateFormat può essere trovato qui.


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java