Java 8 New Date/Time API - Часть 4
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8.
1. Введение
В предыдущей статье мы узнали, как сравнивать даты и время в Java 8. В этой статье мы рассмотрим форматирование дат и времени.
Все дело в том, что нам не всегда подходит вид, в котором отображается дата и время, иногда хочется получить дату в другом формате (без костылей с циклами, разбиением строк и другого ужаса). Для этого в новом Date/Time API есть класс DateTimeFormatter, который умеет форматировать как LocalDate и LocalTime, так и LocalDateTime.
2. Форматирование LocalDate
В DateTimeFormatter существует множество предопределенных форматов, к примеру
1 2 3 4 5 6 |
LocalDate now = LocalDate.now(); String basicIsoDate = now.format(DateTimeFormatter.BASIC_ISO_DATE); // 20180128 String isoDate = now.format(DateTimeFormatter.ISO_DATE); // 2018-01-28 String isoWeekDate = now.format(DateTimeFormatter.ISO_WEEK_DATE); // 2018-W04-7 String isoLocalDate = now.format(DateTimeFormatter.ISO_LOCAL_DATE); // 2018-01-28 String isoOrdinalDate = now.format(DateTimeFormatter.ISO_ORDINAL_DATE); // 2018-028 |
Если же нужного нам формата нет, всегда можно задать свой
1 2 3 |
LocalDate now = LocalDate.now(); String native = now.format(DateTimeFormatter.ofPattern("dd MMM yyyy")); // 28 Jan 2018 String french = now.format(DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.FRANCE)); // 28 janv. 2018 |
3. Форматирование LocalTime
С LocalTime примерно та же история, что и с LocalDate (что уже не удивительно) - несколько уже созданных форматов
1 2 3 |
LocalTime now = LocalTime.now(); String isoLocalTime = now.format(DateTimeFormatter.ISO_LOCAL_TIME); // 08:09:31.514569 String isoTime = now.format(DateTimeFormatter.ISO_TIME); // 08:09:31.514569 |
ISO_TIME в отличии от ISO_LOCAL_TIME может включать временной сдвиг (offset), если он есть. Подробнее разберем этот случай в следующей статье.
Также есть возможность задать свой формат
1 2 3 |
LocalTime now = LocalTime.now(); String nativeFormat = now.format(DateTimeFormatter.ofPattern("hh:mm:ss ")); // 08:10:43 String engFormat = now.format(DateTimeFormatter.ofPattern("h:mm a")); // 08:10 AM |
4. Форматирование LocalDateTime
Здесь уже больше возможностей для форматирования, ведь у нас есть и дата и время
1 2 3 4 5 6 |
LocalDateTime now = LocalDateTime.now(); String rfcFormat = now.format(DateTimeFormatter.ofPattern("E, dd MMM yyyy hh:mm:ss")); // Sun, 28 Jan 2018 08:24:31 String basicIsoDate = now.format(DateTimeFormatter.BASIC_ISO_DATE); // 20180128 String isoDateTime = now.format(DateTimeFormatter.ISO_DATE_TIME); // 2018-01-28T08:24:31.412511 String isoLocalDateTime = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 2018-01-28T08:24:31.412511 String isoLocalDate = now.format(DateTimeFormatter.ISO_LOCAL_DATE); // 2018-01-28 |
В следующей статье мы рассмотрим работу даты и времени с временными зонами . Спасибо, что были с нами 🙂