Jedną z najczęściej wykonywanych operacji dotyczącej daty jest zmiana sposobu jej zapisu.
Gdy utworzymy nowy obiekt typu Date, z konstruktorem domyślnym za pomocą metody toString() otrzymamy bieżącą datę i godzinę w standardowym formacie (np. Sat Mar 12 01:27:24 CET 2011). Oczywiście jest to format, z którego nie korzysta się na co dzień, dlatego też ważne jest umiejętne formatowanie obiektu Date.

Formatowanie daty może odbywać się w 2 strony:

  • gdy posiadamy obiekt Date i chcemy wyświetlić go w pożądanej formie
  • gdy posiadamy już jakiś format i chcemy utworzyć z niego obiekt daty

W obu przypadkach można skorzystać z klasy SimpleDateFormat, która jako argument pobiera właśnie wzorzec za pomocą którego zostanie utworzony nowy sposób zapisu daty.

Przy wyznaczaniu wzorca należy użyć odpowiednich symboli posiadających określone znaczenie.  Wszystkie symbole wraz z ich opisem i przykładem znajdują się w poniższej tabeli.

Symbol Znaczenie Sposób prezentacji Przykład
G Określenie ery Tekst AD; BC
y Rok Liczba 1996; 96
M Miesiąc roku Liczba i Tekst July; Jul; 07
w Tydzień roku Liczba 27
W Tydzień miesiąca Liczba 2
D Dzień roku Liczba 189
d Dzień miesiąca Liczba 10
F Dzień tygodnia w miesiącu Liczba 2
E Dzień tygodnia Tekst Tuesday; Tue
a Oznaczenie pory dnia (A.M. lub P.M) Tekst PM
H Godzina dnia (0-23) Liczba 0
k Godzina dnia (1-24) Liczba 24
K Godzina dnia wyrażona przez am/pm (0-11) Liczba 0
h Godzina dnia wyrażona przez am/pm (1-12) Liczba 12
m Minuta Liczba 30
s Sekunda Liczba 55
S Milisekunda Liczba 978
z Strefa czasowa w formacie General tekst Pacific Standard Time; PST; GMT-08:00
Z Strefa czasowa w formacie RFC822 tekst -0800

Podczas tworzenia formatów należy wspomnieć o następujących zasadach.
W przypadku liczb ilość powtórzeń danego symbolu oznacza ilość pozycji dla reprezentacji np. ‚d’ => 2; ‚dd’ => 02.
Dla symboli określonych w tabeli jako tekst liczba powtórzeń większa bądź równa 4 wyświetla pełną nazwę reprezentacji danego symbolu natomiast mniejsza liczba postać skróconą np. ‚E’ => „So”; ‚EEEE’ => „Sobota”.
Podczas ustalania formatu dla miesiąca (M) reprezentacja wygląda następująco:
– ‚M’ => miesiąc w postaci jednocyfrowej np. 2
– ‚MM’ => miesiąc w postaci dwucyfrowej np. 02
– ‚MMM’ => miesiąc w postaci skróconej nazwy np. „lut”
– ‚MMMM’ => miesiąc w postaci nazwy np. „luty”.

Warto wiedzieć jeszcze, iż możliwe jest użycie tekstu we wzorach. Musi on być objęty w apostrof . W przypadku użycia w tekście pojedynczego apostrofu należy użyć konstrukcji dwóch apostrofów ‚ ‚.

Poniższy program pokazuje użycie klasy SimpleDateFormat do utworzenia nowego formatu aktualnej daty.

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

public class Main { 

  public static void main(String[] args) { 

    // tworzenie aktualnej daty 
    Date now = new Date(); 
    String result; 

    // tworzenie formatu 
    SimpleDateFormat formatter = new SimpleDateFormat("EEEE 'Data:' dd-MM-yyyy 'godz.'hh:mm"); 
    result = formatter.format(now); 
    System.out.println("Nowy format ma postać: " + result); 
  } 
}

Jako końcowy rezultat utworzony zostanie łańcuch reprezentujący aktualną datę. W moim przypadku jest to: „sobota Data: 12-03-2011 godz.04:00”.

W kolejnym programie nastąpi przetworzenie otrzymanej daty w niestandardowym formacie na obiekt Date, który później można przetwarzać w dalszej części programu.

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

public class Main { 
  public static void main(String[] args) { 

    // ref. do nowego obiektu daty 
    Date newDate; 

    // data, ktora nalezy przetworzyc na obiekt 
    Date String dateToFormatt = "2011-04-01"; 

    // formater w formie daty do przetworzenia 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

    try { 
      newDate = formatter.parse(dateToFormatt); 
      System.out.println("Obiekt daty: " + newDate); 
    } catch (ParseException e){ 
      System.out.println("Zly format do przetworzenia : " + formatter); 
    } 
  } 
}

Wynikiem powyższego programu będzie utworzony obiekt Date, a na wyjściu otrzymamy:
„Fri Apr 01 00:00:00 CEST 2011” .