Изящный путь проходит через LocalDate
:
LocalDateTime dateTime = LocalDate.of(2020, Month.JANUARY, 18).atStartOfDay();
System.out.println(dateTime);
Вывод из этого фрагмента:
2020-01-18T00: 00
Если у вас есть месяц как число, например, 1 за январь, используйте вместо него LocalDate.of(2020, 1, 18)
. В остальном то же самое.
Подумайте дважды, прежде чем использовать LocalDateTime
. Мы обычно используем дату и время вместе для установления момента времени. LocalDateTime
для этого не подходит (некоторые скажут, что не может). Почему и как? Он не знает ни часовой пояс, ни смещение от UT C. Таким образом, любой человек и любой программный продукт, читающий LocalDateTime
, могут свободно интерпретировать его в любом часовом поясе, о котором он думает, а не в намеченном. По крайней мере, для 19 из 20 целей лучше использовать ZonedDateTime
или OffsetDateTime
. Например:
ZoneId zone = ZoneId.of("America/Recife");
ZonedDateTime dateTime = LocalDate.of(2020, Month.JANUARY, 18).atStartOfDay(zone);
2020-01-18T00: 00-03: 00 [Америка / Ресифи]
-03:00
между минутами и зоной ID - это смещение от UT C. Теперь мы не оставляем места для неправильного толкования.