Zielony Smok - logo witryny

Daty i czas: Klasa java.text.SimpleDateFormat (1)

Klasa java.text.SimpleDateFormat (1)

Klasa dziedzicząca po DateFormat. Obsługuje formatowanie i parsowanie dat z uwzględnieniem lokalizacji.

Klasa pozwala na tworzenie instancji klasy z użyciem własnego wzorca formatowania. Jednak dokumentacja zachęca do tworzenia instancji przy użyciu metod odziedziczonych: getTimeInstance, getDateInstance albo getDateTimeInstance, a następnie ustawienie wzorca formatowania przy użyciu metody applyPattern.

Tworzenie wzorca

Wzorzec jest łańcuchem znaków. Litery od A do Z i od a do z są interpretowane jako litery wzorca, chyba że są ujęte w pojedyncze cudzysłowy ‘a’. Wtedy nie są interpretowane lecz kopiowane. Wszystkie pozostałe znaki nie są interpretowane lecz są po prostu kopiowane.

Wykaz symboli wzorca

Wykaz symboli wzorca
Litera Prezentowany składnik daty lub czasu Typ Przykład
G era tekst AD, BC
y rok rok 1996, 96
Y rok tygodniowy rok 2009, 09
M miesiąc w roku (zależny od kontekstu) miesiąc July, Jul, 07
L miesiąc w roku (standardowy) miesiąc July, Jul, 07
w tydzień w roku liczba 27
W tydzień w miesiącu liczba 2
D dzień roku liczba 189
d dzień miesiąca iczba 10
F dzień tygodnia w miesiącu liczba 2
E nazwa dnia tygodnia tekst Tuesday, Tue
u numer dnia tygodnia (1=Monday,…,7=Sunday) liczba 1
a znacznik am/pm tekst AM, PM
H godzina dnia (0-23) numer 1
k godzina dnia(1-24) numer 1-24
K godzina przedpołudniowa (am) (0-11) liczba 1
h godzina popołudniowa (pm)(1-12) liczba 11
m minuta w godzinie liczba 30
s sekunda w minucie liczba 55
S milisekunda liczba 978
z strefa czasowa ogólna Pacific Standard Time, PST, GMT-08:00
Z strefa czasowa według RFC 8222 -0800
X strefa czasowa według ISO 8601 -08, -0800, -08:00

Powtarzanie symboli wzorca

Symbole mogą być powtarzane, a liczba powtórzeń określa szczegóły prezentacji.

Tekst

Jeżeli litera wzorca powtarza się 4 razy lub więcej, używany jest format pełny, w innym przypadku używana jest skrócona forma, jeśli jest dostępna.

Liczba

Liczba liter wzorca określa minimalną liczbę cyfr. Do liczb zawierających mniej cyfr jest dodawana stosowna liczba zer wiodących. Przy parsowaniu liczba liter wzorca jest ignorowana, chyba że jest potrzebna do oddzielenia dwóch przyległych pól.

Rok

Jeśli używany jest kalendarz gregoriański to stosowane są następujące reguły:

  • Przy formatowaniu, jeśli liczba liter wzorca równa się 2, rok jest obcinany do 2 cyfr. Inaczej litera wzorca oznacza zwykłą liczbę,
  • przy parsowaniu – jeśli liczba liter wzorca jest większa od 2, rok jest interpretowany dokładnie, niezależnie od liczby cyfr
  • Przy parsowaniu, jeśli użyto jednej lub dwu cyfr, rok jest uznany za względny w stosunku do pewnego stulecia.. Odniesieniem jest data utworzenia instancji klasy SimpleDateFormat. Jeśli ta data to 1 stycznia 1997 to rok daty 01/11/12 będzie uznany za rok 2012. Obowiązuje zasada podkręcenia daty do 80 lat wstecz lub 20 lat naprzód w stosunku do daty utworzenia instancji klasy. Jeśli parsowany jest tylko string, a data zawiera 2 cyfry roku to przyjmowane jest stulecie domyślne. Wszystkie pozostałe liczby liter wzorca będą interpretowane dosłownie. Rok 3 albo 003 albo -3 będą interpretowane jako rok 3 n.e., rok 3 n.e, rok 4 p.n.e.

W przypadku innego kalendarza jeśli liczba liter wzorca wynosi 4 albo więcej to używana jest długa forma. W innym przypadku używane są specyficzne krótkie albo skrócone formy.

Jeśli użyto litery wzorca ‘Y’, a kalendarz nie umożliwia użycia roku tygodniowego, przyjmuje się, że użyto ‘y’.

Miesiąc

Jeśli liczba liter wzorca wynosi 3 lub więcej, miesiąc jest przedstawiany jako tekst, w przeciwnym przypadku jest przedstawiany jako liczba:

  • litera M tworzy nazwy miesięcy zależne od kontekstu, na przykład wbudowane formy nazw.Jeśli obiekt klasy DateFormatSymbols był podany jako parametr konstruktora obiektu SimpleDateFormat albo wywołano metodę setDateSymbols() z tym parametrem, to używane są nazwy miesięcy podane w obiekcie DateFormatSymbols.
  • Litera L oznacza standardowe, niekontekstowe nazwy miesięcy.
Ogólna strefa czasowa

Strefy czasowe – jeśli mają nazwy – są interpretowane jako tekst. Jeśli podane są jako offset od czasu GMT to używa się następującej składni:

  • GMT znak godziny : minuty
  • Znak oznacza ‘+’ albo ‘-‘
  • Godziny podane są jako jedna albo jako dwie cyfry
  • Minuty podane są jako dwie cyfry
  • Cyfra oznacza jedną z cyfr 0 1 2 3 4 5 6 7 8 9
  • Przykłady: GMT+1:00 , GMT+02:00, GMT-8:03, GMT-08:20
Strefa czasowa według RFC 822

Używana jest 4-cyfrowe oznakowanie strefy:

  • Znak godziny minuty
  • Znak oznacza ‘+’ albo ‘-‘
  • Godzina podawana jest jako dwie cyfry od 00 do 23
  • Cyfra oznacza jedną z cyfr 0 1 2 3 4 5 6 7 8 9
  • Przykłady: +0100, +0200, -0803, -0820
Strefa czasowa według ISO 8601

Zostało omówione w rozdziale Norma ISO 8601:2004.

Jeśli przesunięcie od GMT wynosi 0, wstawiana jest litera ‘Z’.

Jeśli liczba liter wzorca strefy wynosi 1, frakcja godzin jest ignorowana

Przy parsowaniu ‘Z’ jest parsowane jako UTC. Ogólne strefy czasowe nie są akceptowane.

Uwagi

Formaty dat nie są synchronizowane. Dla każdego wątku powinna być utworzona oddzielna instancja. Jeśli wiele wątków ma współbieżnie dostęp do formatu, ten musi być synchronizowany zewnętrznie.

Przykłady z dokumentacji

Przykłady z dokumentacji
Date and Time Pattern Result
"yyyy.MM.dd G ‘at’ HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ”yy" Wed, Jul 4, ’01
"h:mm a" 12:08 PM
"hh ‘o”clock’ a, zzzz" 12 o’clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd’T’HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
"yyyy-MM-dd’T’HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
"YYYY-‘W’ww-u" 2001-W27-3