1. Клас DateTimeFormatter
Специалният DateTimeFormatterклас си проправя път в API за дата и час. Целта му е да направи възможно най-лесно за програмистите да конвертират дата и час в точния формат, който желаят. И ние сме щастливи да съобщим, че създателите на Java са успели.
Използването му е много лесно. Първо, трябва да създадете DateTimeFormatterклас и да подадете модел, който указва How ще показва датата и часа:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
Къде dtfе DateTimeFormatterпроменлива. е статичен метод на класа. А шаблонът е низ, който указва модела, който ще се използва за показване на датата и часа.DateTimeFormatter.ofPattern()DateTimeFormatter
Примери
| Код | Конзолен изход |
|---|---|
|
|
В горния пример използваме ofPattern()метода за създаване на DateTimeFormatterобект въз основа на шаблона. И в следващия ред използваме format()метода за преобразуване на LocalDateTimeобект в низ. Виждате резултата на екрана.
Можете да подадете почти всеки обект от API за дата и час към format()метода.
Статиката ofPattern()също е много проста: тя приема модел като аргумент и връща DateTimeFormatterобект. Най-интересната част се намира в модела.
2. Шаблон за форматиране
Низът, предаден като шаблон, се използва като шаблон при показване на информация. MM се заменя с числото на месеца, dd с деня от месеца, а yy с числото на годината. Регистърът на буквите има meaning.
Пълната table за тези времеви модели е следната:
| Писмо | Значение |
|---|---|
| г | година |
| М | месец |
| д | ден |
| з | Часа |
| м | Минути |
| с | Секунди |
| С | Хилядни от секундата |
| н | Наносекунди. |
Не е особено трудно за запомняне.
Но защо моделът в примера включва повтарящи се букви MM, dd и yy? Е, тук става по-интересно.
Главна идея
Броят на буквите влияе върху дължината на текста. Колкото повече букви има, толкова по-дълъг ще бъде текстът.
Ако буквата H е посочена веднъж, тогава 9 часа ще бъдат показани като 9, но ако буквата H е посочена два пъти подред, тогава 9 часа ще бъдат показани като 09.
Ако буквата y е посочена 2 пъти подред, тогава годината се записва с 2 цифри. Ако се появи 4 пъти подред, тогава се използват 4 цифри.
Ако буквата М е посочена 2 пъти подред, тогава се изписва номерът на месеца. Ако 3 пъти подред, тогава се използва името на месеца (първите му 3 букви). Ако 4 пъти подред, тогава се използва пълното име на месеца.
Пример:
| Код | Конзолен изход |
|---|---|
|
|
3. Пълна table с модели
Пълната маса е доста голяма и супер интересна:
| модел | Вариации на модела | Пример | Описание |
|---|---|---|---|
| г | yy, yyyy | 19; 2019 г | година |
| М/Л | М, ММ, МММ, ММММ, МММММ | 1; 01; Ян; януари; Дж | месец |
| д | г, дд | 9; 09 | ден |
| з | H, HH | 2; 02 | Часа |
| м | m, mm | 3; 03 | Минути |
| с | s, ss | 5; 05 | Секунди |
| С | S, SS, SSS, ... | 1; 12; 123 | Хилядни от секундата |
| н | н | 123456789 | Наносекунди |
| Ж | G, GGGG, GGGGG | AD; Anno Domini; А; | ера |
| Q/q | q, qq, qqq, qqqq | 3; 03; Q3; 3-та четвърт | Квартал |
| w | w | 13 | Седмица от годината |
| У | У | 3 | Седмица от месеца |
| д | ЕЕЕЕ, ЕЕЕЕ, ЕЕЕЕ | пн; понеделник; М | Ден от седмицата |
| e/c | e, ee, eee, eeee, eeeee | 1; 01; пн; понеделник; М | Ден от седмицата |
| а | а | PM | Сутрин or Следобед |
| ч | ч | 12 | 12-часов часовник. |
| V | VV | Европа/Хелзинки | Часова зона |
| z | z zzzz | EET; Източноевропейско стандартно време | Часова зона |
| О | О ОООО | GMT+2; GMT+02:00 | Часова зона |
Между другото, това всъщност не е пълната version. Можете да намерите най-пълната version тук .
4. Време за разбор
Класът DateTimeFormatterсъщо е интересен със способността си не само да преобразува дата и час в низ според даден модел, но и да извършва обратната операция!
Разборът на низ е процес на разделянето му на значими токени.
Ето How изглежда:
| Код | Конзолен изход |
|---|---|
|
|
Първо създаваме DateTimeFormatterобект и задаваме модела, който се използва за анализиране.
След това извикваме метода LocalDate.parse()or LocalTime.parse()or LocalDateTime.parse()и предаваме низа, който трябва да бъде анализиран заедно с DateTimeFormatterобекта, който разбира How да анализира подавания текст и Howъв модел трябва да се използва за това.
Друг пример: този път ще анализираме времето.
| Код | Конзолен изход |
|---|---|
|
|
GO TO FULL VERSION