Что выведет код?
#Tasks
public class Task170125_1 {
public static void main(String[] args) {
int i = 0;
while (i++ < 5) {
if (i == 3) continue;
System.out.print(i + " ");
}
}
}
#Tasks
Вопросы с собеседования 👩💻
Что такое polymorphism (полиморфизм) в Java?
Что такое polymorphism (полиморфизм) в Java?
Anonymous Quiz
66%
Это возможность использовать один интерфейс для разных типов данных.
2%
Это возможность создавать несколько конструкторов в классе.
32%
Это возможность создавать несколько методов с одним именем.
0%
Это возможность создавать анонимные классы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Продвинутые аннотации Lombok и лучшие практики
Аннотация @ExtensionMethod
Аннотация @ExtensionMethod позволяет добавлять методы-расширения к существующим классам. Это похоже на extension-методы в Kotlin или C#.
Пример использования:
Как это работает под капотом:
Lombok преобразует вызовы методов-расширений в вызовы статических методов.
Сгенерированный код:
Нюансы использования:
Методы-расширения должны быть статическими.
Аннотация находится в экспериментальном статусе и может измениться в будущем.
Аннотация @Accessors
Аннотация @Accessors настраивает поведение геттеров и сеттеров, например, позволяет создавать цепочные сеттеры.
Пример использования:
Как это работает под капотом:
Lombok генерирует сеттеры, которые возвращают this, что позволяет использовать цепочки вызовов.
Сгенерированный код:
Нюансы использования:
Можно настроить префиксы для геттеров и сеттеров:
Аннотация @Wither
Аннотация @Wither создает методы для создания копии объекта с измененным значением одного поля. Это аналог @With, но находится в экспериментальном статусе.
Пример использования:
Как это работает под капотом:
Lombok генерирует методы withFieldName() для каждого поля.
Сгенерированный код:
Нюансы использования:
Работает только с final-полями.
Находится в экспериментальном статусе.
Аннотация @Helper
Аннотация @Helper создает локальные вспомогательные классы внутри методов.
Пример использования:
Как это работает под капотом:
Lombok создает локальный класс, который можно использовать внутри метода.
Сгенерированный код:
Нюансы использования:
Находится в экспериментальном статусе.
Полезно для организации кода внутри методов.
#Java #Training #Spring #Lombok #ExtensionMethod #Accessors #Wither #Helper
Аннотация @ExtensionMethod
Аннотация @ExtensionMethod позволяет добавлять методы-расширения к существующим классам. Это похоже на extension-методы в Kotlin или C#.
Пример использования:
import lombok.experimental.ExtensionMethod;
import java.util.Collections;
@ExtensionMethod(Collections.class)
public class ListUtils {
public void example() {
java.util.List<String> list = new java.util.ArrayList<>();
list.add("Hello");
list = unmodifiableList(list); // Метод из Collections
}
}
Как это работает под капотом:
Lombok преобразует вызовы методов-расширений в вызовы статических методов.
Сгенерированный код:
public class ListUtils {
public void example() {
java.util.List<String> list = new java.util.ArrayList<>();
list.add("Hello");
list = Collections.unmodifiableList(list);
}
}
Нюансы использования:
Методы-расширения должны быть статическими.
Аннотация находится в экспериментальном статусе и может измениться в будущем.
Аннотация @Accessors
Аннотация @Accessors настраивает поведение геттеров и сеттеров, например, позволяет создавать цепочные сеттеры.
Пример использования:
import lombok.experimental.Accessors;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Accessors(chain = true)
public class User {
private String name;
private int age;
}
// Использование:
User user = new User().setName("John").setAge(30);
Как это работает под капотом:
Lombok генерирует сеттеры, которые возвращают this, что позволяет использовать цепочки вызовов.
Сгенерированный код:
public class User {
private String name;
private int age;
public User setName(String name) {
this.name = name;
return this;
}
public User setAge(int age) {
this.age = age;
return this;
}
}
Нюансы использования:
Можно настроить префиксы для геттеров и сеттеров:
@Accessors(prefix = "m_")
private String m_name;
Аннотация @Wither
Аннотация @Wither создает методы для создания копии объекта с измененным значением одного поля. Это аналог @With, но находится в экспериментальном статусе.
Пример использования:
import lombok.experimental.Wither;
@Wither
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
// Использование:
User user = new User("John", 30);
User newUser = user.withAge(31);
Как это работает под капотом:
Lombok генерирует методы withFieldName() для каждого поля.
Сгенерированный код:
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User withName(String name) {
return this.name == name ? this : new User(name, this.age);
}
public User withAge(int age) {
return this.age == age ? this : new User(this.name, age);
}
}
Нюансы использования:
Работает только с final-полями.
Находится в экспериментальном статусе.
Аннотация @Helper
Аннотация @Helper создает локальные вспомогательные классы внутри методов.
Пример использования:
import lombok.experimental.Helper;
public class Example {
public void exampleMethod() {
@Helper
class LocalHelper {
void help() {
System.out.println("Helping!");
}
}
new LocalHelper().help();
}
}
Как это работает под капотом:
Lombok создает локальный класс, который можно использовать внутри метода.
Сгенерированный код:
public class Example {
public void exampleMethod() {
class LocalHelper {
void help() {
System.out.println("Helping!");
}
}
new LocalHelper().help();
}
}
Нюансы использования:
Находится в экспериментальном статусе.
Полезно для организации кода внутри методов.
#Java #Training #Spring #Lombok #ExtensionMethod #Accessors #Wither #Helper
Лучшие практики использования Lombok
Когда использовать Lombok:
Для сокращения шаблонного кода (геттеры, сеттеры, конструкторы).
Для улучшения читаемости кода.
Как избежать злоупотребления:
Не используйте Lombok для сложной логики.
Избегайте чрезмерного использования аннотаций, таких как @Data или @AllArgsConstructor.
Совместимость с другими библиотеками:
Lombok может конфликтовать с Jackson, Hibernate и другими библиотеками. Будьте осторожны с аннотациями, которые генерируют методы.
Проблемы и ограничения Lombok
Проблемы с поддержкой в IDE:
Некоторые IDE могут некорректно обрабатывать код с Lombok. Убедитесь, что плагин Lombok установлен и настроен.
Ограничения при использовании с другими инструментами:
Например, Jackson может не работать с @Data, если не настроены правильные геттеры и сеттеры.
Отладка:
Поскольку сгенерированный код не отображается в исходниках, отладка может быть сложнее. Убедитесь, что ваша IDE поддерживает Lombok.
#Java #Training #Spring #Lombok #Best_practices
Когда использовать Lombok:
Для сокращения шаблонного кода (геттеры, сеттеры, конструкторы).
Для улучшения читаемости кода.
Как избежать злоупотребления:
Не используйте Lombok для сложной логики.
Избегайте чрезмерного использования аннотаций, таких как @Data или @AllArgsConstructor.
Совместимость с другими библиотеками:
Lombok может конфликтовать с Jackson, Hibernate и другими библиотеками. Будьте осторожны с аннотациями, которые генерируют методы.
Проблемы и ограничения Lombok
Проблемы с поддержкой в IDE:
Некоторые IDE могут некорректно обрабатывать код с Lombok. Убедитесь, что плагин Lombok установлен и настроен.
Ограничения при использовании с другими инструментами:
Например, Jackson может не работать с @Data, если не настроены правильные геттеры и сеттеры.
Отладка:
Поскольку сгенерированный код не отображается в исходниках, отладка может быть сложнее. Убедитесь, что ваша IDE поддерживает Lombok.
#Java #Training #Spring #Lombok #Best_practices
Всем доброго субботнего утра! ☀️
Как планируете провести выходные?
А я на завтра ничего не подготовил... Может кто хочет что-нибудь показать?🧐
Кроме этого, у нас знаменательное событие - канал устойчиво достиг количества в5⃣ 0⃣ 0️⃣ подписчиков 🥳
Много это или мало? Лично для меня - огромно!
Вспоминая как начинался этот канал с 15 подписчиками из интенсива JavaRush, сейчас цифра 500 человек воспринимается как значительное достижение.
Хотелось бы сказать "Спасибо🙂 " каждому, кто осознанно приписывает себя в постоянный состав подписчиков, тех кто не стесняясь приходит на воскресные встречи и принимает непосредственное участие в жизни канала.
Я рад что вы со мной.🤝
А канал однозначно будет развиваться дальше. После изучения Java Core и Spring, пройдемся по фраймворкам с которыми взаимодействуешь каждый день, потом более редким, но эффективным и так далее... Будем однозначно встречаться по воскресениям и писать что-то злободневное для новичков😁
Уверен что совместно, мы сделаем наш канал отличным подспорьем для развития Javистов-новичков, а так же платформой где можно пообщаться и узнать что-то новое!👍
И не стесняйтесь что-то предлагать для развития канала!
Я не SMM-щик и в силу того, что все это делаю один, мне элементарно порой не хватает времени на свежие идеи😎
Как планируете провести выходные?
А я на завтра ничего не подготовил... Может кто хочет что-нибудь показать?
Кроме этого, у нас знаменательное событие - канал устойчиво достиг количества в
Много это или мало? Лично для меня - огромно!
Вспоминая как начинался этот канал с 15 подписчиками из интенсива JavaRush, сейчас цифра 500 человек воспринимается как значительное достижение.
Хотелось бы сказать "Спасибо
Я рад что вы со мной.
А канал однозначно будет развиваться дальше. После изучения Java Core и Spring, пройдемся по фраймворкам с которыми взаимодействуешь каждый день, потом более редким, но эффективным и так далее... Будем однозначно встречаться по воскресениям и писать что-то злободневное для новичков
Уверен что совместно, мы сделаем наш канал отличным подспорьем для развития Javистов-новичков, а так же платформой где можно пообщаться и узнать что-то новое!
И не стесняйтесь что-то предлагать для развития канала!
Я не SMM-щик и в силу того, что все это делаю один, мне элементарно порой не хватает времени на свежие идеи
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет! 🖐
Сегодня, как всегда в 16:00 по МСК, я организую встречу в Яндекс.Телемост.
Сегодня темы встречи нет, пообсуждаем как космические корабли бороздят просторы вселенной...🤣
Приходите, будет неинтересно😏
😁 😁 😁
Сегодня, как всегда в 16:00 по МСК, я организую встречу в Яндекс.Телемост.
Сегодня темы встречи нет, пообсуждаем как космические корабли бороздят просторы вселенной...
Приходите, будет неинтересно
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет!
Начинаем серию постов для углубления недостаточно рассмотренных и актуальных тем.
Классы для работы с датами и временем в Java Time API
Java Time API (пакет java.time) был введен в Java 8 для замены устаревших классов Date и Calendar. Он предоставляет удобные и неизменяемые (immutable) классы для работы с датами и временем.
1. LocalDate
Класс LocalDate представляет дату без времени и временной зоны. Он используется для работы с датами, такими как дни рождения, сроки выполнения задач и т.д.
Пример использования:
Плюсы:
Простота использования.
Неизменяемость (immutable), что делает его потокобезопасным.
Минусы:
Не поддерживает время и временные зоны.
2. LocalTime
Класс LocalTime представляет время без даты и временной зоны. Он используется для работы с временем, например, для учета времени начала и окончания событий.
Пример использования:
Плюсы:
Удобен для работы только с временем.
Неизменяемость.
Минусы:
Не поддерживает даты и временные зоны.
3. LocalDateTime
Класс LocalDateTime объединяет LocalDate и LocalTime, представляя дату и время без временной зоны. Он используется, когда нужно работать с датой и временем одновременно.
Пример использования:
Плюсы:
Удобен для работы с датой и временем.
Неизменяемость.
Минусы:
Не поддерживает временные зоны.
4. ZonedDateTime
Класс ZonedDateTime расширяет LocalDateTime, добавляя информацию о временной зоне. Он используется для работы с датой и временем в конкретной временной зоне.
Пример использования:
Плюсы:
Поддержка временных зон.
Неизменяемость.
Минусы:
Сложнее в использовании из-за необходимости учитывать временные зоны.
5. Форматирование и парсинг: DateTimeFormatter
Класс DateTimeFormatter используется для форматирования и парсинга дат и времени. Он поддерживает множество предопределенных форматов, а также позволяет создавать собственные.
Пример использования:
Плюсы:
Гибкость в настройке форматов.
Поддержка локализации.
Минусы:
Требует внимательности при указании форматов, чтобы избежать ошибок.
#Java #Training #Medium #Date #LocalDate #LocalTime #LocalDateTime #ZonedDateTime #DateTimeFormatter
Начинаем серию постов для углубления недостаточно рассмотренных и актуальных тем.
Классы для работы с датами и временем в Java Time API
Java Time API (пакет java.time) был введен в Java 8 для замены устаревших классов Date и Calendar. Он предоставляет удобные и неизменяемые (immutable) классы для работы с датами и временем.
1. LocalDate
Класс LocalDate представляет дату без времени и временной зоны. Он используется для работы с датами, такими как дни рождения, сроки выполнения задач и т.д.
Пример использования:
LocalDate today = LocalDate.now(); // Текущая дата
LocalDate specificDate = LocalDate.of(2023, 10, 15); // Конкретная дата
System.out.println("Сегодня: " + today);
System.out.println("Конкретная дата: " + specificDate);
Плюсы:
Простота использования.
Неизменяемость (immutable), что делает его потокобезопасным.
Минусы:
Не поддерживает время и временные зоны.
2. LocalTime
Класс LocalTime представляет время без даты и временной зоны. Он используется для работы с временем, например, для учета времени начала и окончания событий.
Пример использования:
LocalTime now = LocalTime.now(); // Текущее время
LocalTime specificTime = LocalTime.of(14, 30); // Конкретное время
System.out.println("Сейчас: " + now);
System.out.println("Конкретное время: " + specificTime);
Плюсы:
Удобен для работы только с временем.
Неизменяемость.
Минусы:
Не поддерживает даты и временные зоны.
3. LocalDateTime
Класс LocalDateTime объединяет LocalDate и LocalTime, представляя дату и время без временной зоны. Он используется, когда нужно работать с датой и временем одновременно.
Пример использования:
LocalDateTime now = LocalDateTime.now(); // Текущая дата и время
LocalDateTime specificDateTime = LocalDateTime.of(2023, 10, 15, 14, 30); // Конкретная дата и время
System.out.println("Сейчас: " + now);
System.out.println("Конкретная дата и время: " + specificDateTime);
Плюсы:
Удобен для работы с датой и временем.
Неизменяемость.
Минусы:
Не поддерживает временные зоны.
4. ZonedDateTime
Класс ZonedDateTime расширяет LocalDateTime, добавляя информацию о временной зоне. Он используется для работы с датой и временем в конкретной временной зоне.
Пример использования:
ZonedDateTime nowInTokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); // Текущее время в Токио
ZonedDateTime specificDateTimeInNewYork = ZonedDateTime.of(2023, 10, 15, 14, 30, 0, 0, ZoneId.of("America/New_York"));
System.out.println("Сейчас в Токио: " + nowInTokyo);
System.out.println("Конкретное время в Нью-Йорке: " + specificDateTimeInNewYork);
Плюсы:
Поддержка временных зон.
Неизменяемость.
Минусы:
Сложнее в использовании из-за необходимости учитывать временные зоны.
5. Форматирование и парсинг: DateTimeFormatter
Класс DateTimeFormatter используется для форматирования и парсинга дат и времени. Он поддерживает множество предопределенных форматов, а также позволяет создавать собственные.
Пример использования:
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
String formattedDateTime = now.format(formatter); // Форматирование
System.out.println("Форматированная дата и время: " + formattedDateTime);
LocalDateTime parsedDateTime = LocalDateTime.parse("15.10.2023 14:30:00", formatter); // Парсинг
System.out.println("Распарсенная дата и время: " + parsedDateTime);
Плюсы:
Гибкость в настройке форматов.
Поддержка локализации.
Минусы:
Требует внимательности при указании форматов, чтобы избежать ошибок.
#Java #Training #Medium #Date #LocalDate #LocalTime #LocalDateTime #ZonedDateTime #DateTimeFormatter
Что выведет код?
#Tasks
import java.time.LocalDate;
import java.time.Period;
public class Task200125_1 {
public static void main(String[] args) {
LocalDate date1 = LocalDate.of(2024, 10, 1);
LocalDate date2 = LocalDate.of(2024, 9, 30);
Period period = Period.between(date1, date2);
System.out.println(period.getDays());
}
}
#Tasks
Вопросы с собеседования 👩💻
Что такое garbage collection в Java?
Что такое garbage collection в Java?
Anonymous Quiz
10%
Это процесс создания новых объектов.
4%
Это процесс синхронизации потоков.
78%
Это процесс удаления неиспользуемых объектов из памяти.
0%
Это процесс компиляции Java-кода.
8%
Это процесс получение тупых вопросов по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Работа с временными зонами, Duration и Period
1. Работа с временными зонами
В Java Time API временные зоны представлены классом ZoneId. Этот класс позволяет работать с различными временными зонами, такими как "Europe/Moscow", "America/New_York" и т.д. Временные зоны важны для корректного отображения времени в разных регионах мира.
Пример использования:
Плюсы:
Поддержка всех временных зон мира.
Удобство работы с временными зонами.
Минусы:
Необходимость учитывать переход на летнее время (Daylight Saving Time, DST).
2. Класс Duration
Класс Duration используется для работы с временными интервалами, измеряемыми в секундах и наносекундах. Он подходит для измерения коротких промежутков времени, таких как длительность выполнения задачи.
Пример использования:
Плюсы:
Точность до наносекунд.
Удобство для работы с короткими интервалами.
Минусы:
Не подходит для работы с большими интервалами (например, годами).
3. Класс Period
Класс Period используется для работы с временными интервалами, измеряемыми в годах, месяцах и днях. Он подходит для работы с длительными периодами, такими как возраст человека или срок действия договора.
Пример использования:
Плюсы:
Удобство для работы с длительными периодами.
Поддержка лет, месяцев и дней.
Минусы:
Не учитывает время и временные зоны.
4. Пример совместного использования Duration и Period
Иногда требуется работать как с короткими, так и с длительными интервалами. В таких случаях можно использовать Duration и Period вместе.
Пример использования:
Плюсы:
Гибкость в работе с различными интервалами.
Возможность комбинировать подходы.
Минусы:
Необходимость учитывать различия между Duration и Period.
5. Нюансы использования
Переход на летнее время: При работе с временными зонами важно учитывать переход на летнее время, который может изменить смещение временной зоны.
Неизменяемость: Все классы Java Time API являются неизменяемыми, что делает их потокобезопасными, но требует создания новых объектов при изменении значений.
Локализация: При форматировании дат и времени с использованием DateTimeFormatter можно учитывать локальные настройки пользователя.
#Java #Training #Medium #Date #Duration #Period
1. Работа с временными зонами
В Java Time API временные зоны представлены классом ZoneId. Этот класс позволяет работать с различными временными зонами, такими как "Europe/Moscow", "America/New_York" и т.д. Временные зоны важны для корректного отображения времени в разных регионах мира.
Пример использования:
ZoneId londonZone = ZoneId.of("Europe/London");
ZoneId newYorkZone = ZoneId.of("America/New_York");
ZonedDateTime londonTime = ZonedDateTime.now(londonZone);
ZonedDateTime newYorkTime = ZonedDateTime.now(newYorkZone);
System.out.println("Текущее время в Лондоне: " + londonTime);
System.out.println("Текущее время в Нью-Йорке: " + newYorkTime);
Плюсы:
Поддержка всех временных зон мира.
Удобство работы с временными зонами.
Минусы:
Необходимость учитывать переход на летнее время (Daylight Saving Time, DST).
2. Класс Duration
Класс Duration используется для работы с временными интервалами, измеряемыми в секундах и наносекундах. Он подходит для измерения коротких промежутков времени, таких как длительность выполнения задачи.
Пример использования:
LocalTime startTime = LocalTime.of(14, 0);
LocalTime endTime = LocalTime.of(15, 30);
Duration duration = Duration.between(startTime, endTime);
System.out.println("Длительность: " + duration.toMinutes() + " минут");
Плюсы:
Точность до наносекунд.
Удобство для работы с короткими интервалами.
Минусы:
Не подходит для работы с большими интервалами (например, годами).
3. Класс Period
Класс Period используется для работы с временными интервалами, измеряемыми в годах, месяцах и днях. Он подходит для работы с длительными периодами, такими как возраст человека или срок действия договора.
Пример использования:
LocalDate startDate = LocalDate.of(2020, 1, 1);
LocalDate endDate = LocalDate.of(2023, 10, 15);
Period period = Period.between(startDate, endDate);
System.out.println("Период: " + period.getYears() + " лет, " + period.getMonths() + " месяцев, " + period.getDays() + " дней");
Плюсы:
Удобство для работы с длительными периодами.
Поддержка лет, месяцев и дней.
Минусы:
Не учитывает время и временные зоны.
4. Пример совместного использования Duration и Period
Иногда требуется работать как с короткими, так и с длительными интервалами. В таких случаях можно использовать Duration и Period вместе.
Пример использования:
LocalDateTime startDateTime = LocalDateTime.of(2020, 1, 1, 14, 0);
LocalDateTime endDateTime = LocalDateTime.of(2023, 10, 15, 15, 30);
Duration duration = Duration.between(startDateTime, endDateTime);
Period period = Period.between(startDateTime.toLocalDate(), endDateTime.toLocalDate());
System.out.println("Период: " + period.getYears() + " лет, " + period.getMonths() + " месяцев, " + period.getDays() + " дней");
System.out.println("Длительность: " + duration.toHours() + " часов");
Плюсы:
Гибкость в работе с различными интервалами.
Возможность комбинировать подходы.
Минусы:
Необходимость учитывать различия между Duration и Period.
5. Нюансы использования
Переход на летнее время: При работе с временными зонами важно учитывать переход на летнее время, который может изменить смещение временной зоны.
Неизменяемость: Все классы Java Time API являются неизменяемыми, что делает их потокобезопасными, но требует создания новых объектов при изменении значений.
Локализация: При форматировании дат и времени с использованием DateTimeFormatter можно учитывать локальные настройки пользователя.
#Java #Training #Medium #Date #Duration #Period
Форматирование и парсинг дат с DateTimeFormatter
1. Создание кастомного формата с помощью DateTimeFormatter.ofPattern()
Класс DateTimeFormatter в Java используется для форматирования и парсинга дат и времени. С помощью метода ofPattern() можно создать кастомный формат, используя специальные символы. Например:
В DateTimeFormatter используется множество символов для создания кастомных форматов. Вот полный список основных вариантов:
1. Год (Year)
y или yyyy — год (4 цифры). Пример: 2023.
yy — год (2 цифры). Пример: 23.
u — год в формате ISO (аналогичен y, но поддерживает отрицательные годы). Пример: 2023.
2. Месяц (Month)
M — месяц (от 1 до 12). Пример: 1, 12.
MM — месяц (2 цифры). Пример: 01, 12.
MMM — сокращенное название месяца. Пример: Jan, Dec.
MMMM — полное название месяца. Пример: January, December.
3. День (Day)
d — день месяца (от 1 до 31). Пример: 1, 31.
dd — день месяца (2 цифры). Пример: 01, 31.
D — день года (от 1 до 366). Пример: 1, 365.
F — день недели в месяце (например, 2-й понедельник). Пример: 1, 2.
4. День недели (Day of Week)
E — сокращенное название дня недели. Пример: Mon, Sun.
EEEE — полное название дня недели. Пример: Monday, Sunday.
5. Час (Hour)
H — час в 24-часовом формате (от 0 до 23). Пример: 0, 23.
HH — час в 24-часовом формате (2 цифры). Пример: 00, 23.
h — час в 12-часовом формате (от 1 до 12). Пример: 1, 12.
hh — час в 12-часовом формате (2 цифры). Пример: 01, 12.
k — час в 24-часовом формате (от 1 до 24). Пример: 1, 24.
K — час в 12-часовом формате (от 0 до 11). Пример: 0, 11.
6. Минуты (Minutes)
m — минуты (от 0 до 59). Пример: 0, 59.
mm — минуты (2 цифры). Пример: 00, 59.
7. Секунды (Seconds)
s — секунды (от 0 до 59). Пример: 0, 59.
ss — секунды (2 цифры). Пример: 00, 59.
S — доли секунды (миллисекунды, наносекунды). Пример: 0, 999.
8. Временная зона (Time Zone)
z — название временной зоны. Пример: PST, GMT+03:00.
Z — смещение временной зоны в формате +HHMM или -HHMM. Пример: +0300, -0500.
X — смещение временной зоны в формате Z, ±HH:mm, ±HHmm или ±HH. Пример: Z, +03, +0300.
O — локальное смещение временной зоны. Пример: GMT+3.
9. Период дня (AM/PM)
a — маркер периода дня (AM/PM). Пример: AM, PM.
10. Эра (Era)
G — эра (до н.э. или н.э.). Пример: AD, BC.
Примеры использования
Полный формат даты и времени:
Сокращенное название месяца и дня недели:
Время с AM/PM:
Смещение временной зоны:
Нюансы использования
Регистр символов: Символы в DateTimeFormatter чувствительны к регистру. Например, MM — это месяц, а mm — минуты.
Повторение символов: Количество символов влияет на формат. Например, yyyy выводит год с 4 цифрами, а yy — с 2.
Экранирование символов: Если нужно вывести символ как текст (например, T в ISO_DATE_TIME), используйте одинарные кавычки: 'T'.
#Java #Training #Medium #Date #DateTimeFormatter
1. Создание кастомного формата с помощью DateTimeFormatter.ofPattern()
Класс DateTimeFormatter в Java используется для форматирования и парсинга дат и времени. С помощью метода ofPattern() можно создать кастомный формат, используя специальные символы. Например:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
В DateTimeFormatter используется множество символов для создания кастомных форматов. Вот полный список основных вариантов:
1. Год (Year)
y или yyyy — год (4 цифры). Пример: 2023.
yy — год (2 цифры). Пример: 23.
u — год в формате ISO (аналогичен y, но поддерживает отрицательные годы). Пример: 2023.
2. Месяц (Month)
M — месяц (от 1 до 12). Пример: 1, 12.
MM — месяц (2 цифры). Пример: 01, 12.
MMM — сокращенное название месяца. Пример: Jan, Dec.
MMMM — полное название месяца. Пример: January, December.
3. День (Day)
d — день месяца (от 1 до 31). Пример: 1, 31.
dd — день месяца (2 цифры). Пример: 01, 31.
D — день года (от 1 до 366). Пример: 1, 365.
F — день недели в месяце (например, 2-й понедельник). Пример: 1, 2.
4. День недели (Day of Week)
E — сокращенное название дня недели. Пример: Mon, Sun.
EEEE — полное название дня недели. Пример: Monday, Sunday.
5. Час (Hour)
H — час в 24-часовом формате (от 0 до 23). Пример: 0, 23.
HH — час в 24-часовом формате (2 цифры). Пример: 00, 23.
h — час в 12-часовом формате (от 1 до 12). Пример: 1, 12.
hh — час в 12-часовом формате (2 цифры). Пример: 01, 12.
k — час в 24-часовом формате (от 1 до 24). Пример: 1, 24.
K — час в 12-часовом формате (от 0 до 11). Пример: 0, 11.
6. Минуты (Minutes)
m — минуты (от 0 до 59). Пример: 0, 59.
mm — минуты (2 цифры). Пример: 00, 59.
7. Секунды (Seconds)
s — секунды (от 0 до 59). Пример: 0, 59.
ss — секунды (2 цифры). Пример: 00, 59.
S — доли секунды (миллисекунды, наносекунды). Пример: 0, 999.
8. Временная зона (Time Zone)
z — название временной зоны. Пример: PST, GMT+03:00.
Z — смещение временной зоны в формате +HHMM или -HHMM. Пример: +0300, -0500.
X — смещение временной зоны в формате Z, ±HH:mm, ±HHmm или ±HH. Пример: Z, +03, +0300.
O — локальное смещение временной зоны. Пример: GMT+3.
9. Период дня (AM/PM)
a — маркер периода дня (AM/PM). Пример: AM, PM.
10. Эра (Era)
G — эра (до н.э. или н.э.). Пример: AD, BC.
Примеры использования
Полный формат даты и времени:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(now.format(formatter)); // Пример: 2023-10-25 14:30:00
Сокращенное название месяца и дня недели:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy, EEE");
LocalDate date = LocalDate.now();
System.out.println(date.format(formatter)); // Пример: 25 Oct 2023, Wed
Время с AM/PM:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss a");
LocalTime time = LocalTime.now();
System.out.println(time.format(formatter)); // Пример: 02:30:00 PM
Смещение временной зоны:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss Z");
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime.format(formatter)); // Пример: 2023-10-25 14:30:00 +0300
Нюансы использования
Регистр символов: Символы в DateTimeFormatter чувствительны к регистру. Например, MM — это месяц, а mm — минуты.
Повторение символов: Количество символов влияет на формат. Например, yyyy выводит год с 4 цифрами, а yy — с 2.
Экранирование символов: Если нужно вывести символ как текст (например, T в ISO_DATE_TIME), используйте одинарные кавычки: 'T'.
#Java #Training #Medium #Date #DateTimeFormatter