JavaFX получит первый день следующего месяца - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь получить первый день следующего месяца от объекта LocalDate, но столкнулся с некоторыми проблемами.

У меня есть средство выбора даты, где пользователь может выбрать любую дату, которую он хочет, без ограничений, и мне нужно получить первый день следующего месяца, вот что я подумал сделать:

LocalDate localDate = myDatePicker.getValue();
LocalTime startTime = LocalTime.of(0, 0);

LocalDate endDate = LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);

Однако я вижу проблему, которая может возникнуть при выборе декабря, если это произойдет, то вызов

LocalDate.of(localDate.getYear(), localDate.getMonthValue() + 1, 0);

должен произойти сбой, потому что я передаю ему значение месяца 13. Теперь я могу выбратьпроверьте, является ли значение месяца декабрь, и если да, я мог бы добавить 1 к году и начать с 0 следующим образом:

if(localDate.getMonthValue() >= 12)
    LocalDate.of(localDate.getYear() + 1, 0, 0);

Однако я чувствую, что должен быть способ обойти это в самом классе,Кто-нибудь знает, что мои предположения о переходе 13 в значение LocalDate.of месяца приведут к ошибке?Если это так, есть ли способ сделать то, что я хочу сделать, который выглядит не так уж плохо и использует метод сборки в?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

К счастью, Java делает это действительно простым с идеей регуляторов и TemporalAdjusters.firstDayOfNextMonth():

import java.time.*;
import java.time.temporal.*;

public class Test {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2018, 12, 3);
        LocalDate date2 = date1.with(TemporalAdjusters.firstDayOfNextMonth());
        System.out.println(date2); // 2019-01-01
    }
}
0 голосов
/ 03 декабря 2018

Используя LocalDate, вы можете получить firstDayofNextMonth с TemporalAdjusters.firstDayOfNextMonth()

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class Test {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        LocalDate firstDayOfNextMonth = date.with(TemporalAdjusters.firstDayOfNextMonth());
        System.out.println(firstDayOfNextMonth);
    }
}
0 голосов
/ 03 декабря 2018
  1. Пользовательский способ:

    • .plusMonths(1) для получения следующего месяца
    • .withDayOfMonth(1) для получения первого дня

      LocalDate localDate = LocalDate.of(2018, 12, 15);
      LocalDate firstNext = localDate.plusMonths(1).withDayOfMonth(1);
      // or     firstNext = localDate.withDayOfMonth(1).plusMonths(1);
      System.out.println(firstNext); //2019-01-01
      

Встроенный способ с:

  • TemporalAdjusters.firstDayOfNextMonth()

    firstNext = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
    
    // does a temporal.with(DAY_OF_MONTH, 1).plus(1, MONTHS); operation
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...