1. Klasa DateTimeFormatter
Do API Date Time dodano specjalną klasę DateTimeFormatter
. Jego celem jest jak najłatwiejsze przekonwertowanie daty i godziny na dokładnie taki format, jakiego potrzebuje programista. I można powiedzieć, że twórcom Javy się to udało.
Jest bardzo łatwy w użyciu. Najpierw należy utworzyć obiekt klasy DateTimeFormatter
i przekazać do niego szablon, według którego będzie wyświetlana data i godzina:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(шаблон);
Gdzie dtf
jest zmienną typu DateTimeFormatter
. jest statyczną metodą klasy . A szablon jest ciągiem znaków, który określa szablon, według którego będzie wyświetlana data i godzina.DateTimeFormatter.ofPattern()
DateTimeFormatter
Przykłady
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
W powyższym przykładzie używamy metody ofPattern()
do stworzenia obiektu DateTimeFormatter
na podstawie ciągu szablonu. A w następnym wierszu za pomocą metody format()
konwertujemy obiekt typu LocalDateTime
na ciąg znaków. Widzisz wynik na ekranie.
Do metody format()
można przekazać prawie każdy obiekt z interfejsu Date Time API .
Metoda statyczna ofPattern()
jest również bardzo prosta: jako parametr przyjmuje ciąg szablonu i zwraca obiekt typu DateTimeFormatter
. Najciekawsze jest wewnątrz szablonu.
2. Wzorzec formatowania
Ciąg przekazany jako wzorzec jest używany jako szablon podczas wyświetlania informacji. MM zastępuje się numerem miesiąca, dd dniem miesiąca, yy numerem roku. Sprawa listu ma znaczenie.
Pełna tabela konwersji czasu wygląda następująco:
List | Przeznaczenie |
---|---|
y | Rok |
M | Miesiąc |
D | Dzień dzień) |
H | godziny |
M | Minuty |
S | sekundy |
S | tysięcznych sekundy |
N | Nanosekundy. |
Zasadniczo nie jest to trudne do zapamiętania.
I dlaczego w takim razie w szablonie z przykładu litery MM, dd i yy zostały zapisane dwukrotnie? I tutaj robi się ciekawiej.
Główny pomysł
Liczba liter wpływa na długość tekstu. Im większe litery, tym dłuższy będzie tekst.
Jeśli litera H zostanie podana raz, godzina 9 zostanie wyświetlona jako 9, a jeśli litera H zostanie podana dwa razy z rzędu, godzina 9 zostanie wyświetlona jako 09.
Jeśli litera y jest wskazana 2 razy z rzędu, to rok jest zapisywany 2 cyframi, jeśli 4 razy z rzędu - 4 cyframi.
Jeśli litera M jest wskazana 2 razy z rzędu, to zapisywany jest numer miesiąca, jeśli 3 razy z rzędu, to nazwa miesiąca (pierwsze 3 litery), jeśli 4 razy z rzędu, to pełna nazwa miesiąca.
Przykład:
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
3. Pełna tabela wzorów
Pełna tabela jest dość duża i bardzo interesująca:
Próbka | Wariacje wzorów | Przykład | Opis |
---|---|---|---|
y | yyy, yyyy | 19; 2019 | Rok |
M/L | M, MM, MM, MMMM, MMMM | 1; 01; Jan; Styczeń; J | Miesiąc |
D | d, dd | 9; 09 | Dzień |
H | H, HH | 2; 02 | Oglądać |
M | m, mm | 3; 03 | minuty |
S | s, ss | 5; 05 | sekundy |
S | S, SS, SSS, ... | 1; 12; 123 | tysięcznych sekundy |
N | N | 123456789 | Nanosekundy |
G | G, GGGG, GGGGG | OGŁOSZENIE; Anna Domini; A; | Era |
pytanie/pytanie | q, qq, qqq, qqqq | 3; 03; Q3; III kwartał | Kwartał |
w | w | 13 | Tydzień w roku |
W | W | 3 | Tydzień miesiąca |
mi | EEEE, EEEE, EEEE | poniedziałek; Poniedziałek; M | Dzień tygodnia |
e/c | e, eee, eee, eee, eeeee | 1; 01; poniedziałek; Poniedziałek; M | Dzień tygodnia |
A | A | PO POŁUDNIU | Rano albo wieczorem |
H | H | 12 | Czas 1-12 godzin. |
V | VV | Europa/Helsinki | Strefa czasowa |
z | zzzz | EET; Wschodnioeuropejski czas standardowy | Strefa czasowa |
O | O OOOO | GMT+2; GMT+02:00 | Strefa czasowa |
Nawiasem mówiąc, nie jest to najbardziej kompletna wersja. Najbardziej kompletny jest tutaj:
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/time/format/DateTimeFormatter.html
4. Analiza czasu
Klasa DateTimeFormatter
jest o tyle ciekawa, że potrafi nie tylko przekonwertować datę i godzinę na napis według zadanego szablonu, ale także wykonać operację odwrotną!
Analizowanie i analizowanie łańcucha nazywa się parsowaniem od słowa parse .
Oto jak wygląda taki proces:
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
Najpierw tworzymy obiekt DateTimeFormatter
i ustawiamy w nim szablon parsowania.
Następnie wywołujemy metodę LocalDate.parse()
or LocalTime.parse()
lub LocalDateTime.parse()
i przekazujemy do tej metody ciąg znaków, który ma zostać przeanalizowany oraz obiekt DateTimeFormatter
, który rozumie, jak i za pomocą jakiego szablonu należy przeanalizować przesłany tekst.
Inny przykład: tym razem z parsowaniem czasu.
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
GO TO FULL VERSION