Date e calendari

Da Head First Java O'Reilly, capitolo 10. Parte dedicata alla formattazione delle date.

Per formattare le date si usa la funzione static format() di String in maniera molto simile a quanto visto per i numeri.

La differenza fondamentale é che nella formattazione delle date si usano due caratteri per specificare il tipo del parametro e non uno:
String.format("%tc", new Date());
  • %tc: la data completa (dom dic 13 21:11:42 CET 2009)
  • %tr: il solo tempo nel giorno corrente (09:16:34 PM)
  • %tA: il giorno della settimana (domenica)
  • %tB: il mese dell'anno (dicembre)
  • %tr: il giorno nel mese (13)

Un utile flag da usarsi come numero di argomento é "<", che permette di riferirsi facilmente allo stesso parametro. Esempio:

System.out.println(String.format("%tA %<td %<tB", new Date()));

stampa "domenica 13 dicembre".

Calendar

Se java.util.Date é la classe di elezione per ottenere il timestamp corrente, per manipolare le date é meglio usare la classe java.util.Calendar che, fra l'altro, é stata disegnata per supportare diversi calendari e non solo il nostro, il cosiddetto calendario gregoriano. In ogni caso, se non specifichiamo quale calendario vogliamo utilizzare otteniamo il default per localizzazione corrente. Il meccanismo per far ciò é implementato nel metodo getInstance() della classe Calendar che deciderà quale delle sue classi figlie instanziare per noi.

Ecco un esempio d'uso del Calendar:

public void calendar() {
Calendar c = Calendar.getInstance();
System.out.println(c.getTime());

c.set(2012, 11, 20, 20, 12); // Thu Dec 20 20:12:22 CET 2012
System.out.println(c.getTime());

long day = c.getTimeInMillis() + 1000 * 60 * 60; // + 1h
c.setTimeInMillis(day); // Thu Dec 20 21:12:29 CET 2012
System.out.println(c.getTime());
System.out.println("Hour: " + c.get(Calendar.HOUR_OF_DAY)); // Hour: 21
c.add(Calendar.DATE, 35); // Thu Jan 24 21:12:29 CET 2013
System.out.println("35 days later: " + c.getTime());
c.roll(Calendar.DATE, 35); // Mon Jan 28 21:12:29 CET 2013
System.out.println("35 days rolling: " + c.getTime());
c.set(Calendar.DATE, 1); // Tue Jan 01 21:12:29 CET 2013
System.out.println("set day to 1: " + c.getTime());
}

Alcuni tra i campi del calendario più usati sono:
  • DATE, DATE_OF_MONTH: il giorno del mese;
  • HOUR, HOUR_OF_DAY: l'ora del giorno;
  • MILLISECOND;
  • MINUTE;
  • MONTH: il mese;
  • YEAR: l'anno;
Alcuni tra i metodi più utilizzati:
  • add(int field, int amount): aggiunge o sottrae tempo dal campo specificato;
  • get(int field): ritorna il valore del campo specificato;
  • getInstance(): un calendario per la localizzazione corrente;
  • getTimeInMillis(): la data convertita in millisecondi (long);
  • roll(int field, boolean up): aggiunge o toglie una unità dal campo specificato, senza modificare gli altri campi;
  • roll(int field, int amount): varia il campo specificato, senza impattare sugli altri;
  • set(int field, int value): specifica direttamente il valore per un determinato campo;
  • set(int year, int month, int day, int hour, int minute): specifica il tempo;
  • setTimeInMillis(long millis): specifica la data del calendario a partire dal tempo in millisecondi.

Nessun commento:

Posta un commento