Нужно получить начальное и конечное время текущего месяца
Всем привет. Разбираюсь с вопросом времени в java. Нашел пару интересных задач, но одну мне кажется делаю не правильно. Надо получить начальное и конечное время текущего месяца (сек мин часы дни). Я сделал это как в примере ниже, но это немного по читерски. Как это сделать лучше ?
YearMonth month = YearMonth.now();
String first = month.atDay(1).toString(),
last = month.atEndOfMonth().toString();
System.out.println(first);
System.out.println(last);
Ответы (2 шт):
Можно использовать TemporalAdjusters:
private static String getEndOfCurrentMonth() { //последний день месяца
return LocalDate.now()
.with(TemporalAdjusters.lastDayOfMonth())
.toString();
}
private static String getStartOfCurrentMonth() { //первый день месяца
return LocalDate.now()
.with(TemporalAdjusters.firstDayOfMonth())
.toString();
}
PS но и ваш вариант тоже работает.
Если задача состоит в получении именно времени, а не только даты первого и последнего дня текущего месяца, то следует применить ещё пару читерских методов для конвертации LocalDate в LocalDateTime:
LocalDate::atStartOfDay(также есть вариант с выбором часового поясаLocalDate::atStartOfDay(ZoneId zoneId)):
LocalDateTime f = month.atDay(1).atStartOfDay();
System.out.println(f); // 2021-10-01T00:00
- набор методов
LocalDateTime::atTime(int h, int m, int s, int nano), позволяющих задать время в виде часов, минут, секунд, наносекунд - метод
LocalDateTime::atTime(LocalTime locTime), позволяющий выбрать текущее время, используяLocalTime::now:
LocalDateTime e = month.atEndOfMonth().atTime(LocalTime.now());
System.out.println(e); // 2021-10-31T19:42:05.477406700
Также можно сконвертировать дату в OffsetDateTime при помощи метода LocalDate::atTime(OffsetTime off)