Get All Bi-Weekly dates of year in Java

Ninad Pingale :

I want to calculate bi weekly dates of a year. So I should get 2 dates per month.

I have tired it so far -

private static void getAllBiWeeks() {

        int lastYear = java.time.Year.now().getValue() - 1;
        int currentYear = java.time.Year.now().getValue();
        int nextYear = java.time.Year.now().getValue() + 1;

        System.out.println("lastYear - " + lastYear);
        System.out.println("currentYear - " + currentYear);
        System.out.println("nextYear - " + nextYear);

        LocalDate lastYearDate = LocalDate.of(lastYear, 12, 01);
        LocalDate currentYearFirstDate = LocalDate.of(currentYear, 01, 01);
        LocalDate currentYearLastDate = LocalDate.of(currentYear, 12, 31);
        LocalDate nextYearFirstDate = LocalDate.of(nextYear, 01, 01);

        System.out.println("lastYearDate - " + lastYearDate);
        System.out.println("currentYearFirstDate - " + currentYearFirstDate);
        System.out.println("nextYearFirstDate - " + nextYearFirstDate);

        LocalDate lastYearLastDate = LocalDate.of(lastYear, 12, 31);
        LocalDate lastYearLast15Days = lastYearLastDate.minusWeeks(2);

        System.out.println("lastYearLast15Days - " + lastYearLast15Days);

        System.out.println(lastYearLast15Days.isBefore(nextYearFirstDate));

        for (LocalDate date = currentYearFirstDate; date.isBefore(currentYearLastDate); date = date.plusWeeks(2)) {
            System.out.println(date);
        }
    }

But it is not giving correct dates, it gives following output -

lastYear - 2018
currentYear - 2019
nextYear - 2020
lastYearDate - 2018-12-01
currentYearFirstDate - 2019-01-01
nextYearFirstDate - 2020-01-01
lastYearLast15Days - 2018-12-17
true
2019-01-01
2019-01-15
2019-01-29
2019-02-12
2019-02-26
2019-03-12
2019-03-26
2019-04-09
2019-04-23
2019-05-07
2019-05-21
2019-06-04
2019-06-18
2019-07-02
2019-07-16
2019-07-30
2019-08-13
2019-08-27
2019-09-10
2019-09-24
2019-10-08
2019-10-22
2019-11-05
2019-11-19
2019-12-03
2019-12-17

How can I get dates like this -

2019-01-01
2019-01-16
2019-02-01
2019-02-16
.
.
Jon Skeet :

I want to calculate bi weekly dates of a year. So I should get 2 dates per month.

No, not necessarily. There are 52 weeks in a year (plus a bit) but only 12 months. Biweekly - every other week - would give you 26 or 27 dates per year, whereas "2 dates per month" would give you 24 dates per year.

If you want the 1st and 16th (not 15th?) for each month of the year, I'd suggest just doing that in a loop:

for (int month = 1; month <= 12; month++) {
    System.out.println(LocalDate.of(year, month, 1);
    System.out.println(LocalDate.of(year, month, 16);
}

It sounds like that will give you the output that you're looking for - but you should be aware that's not what most people would understand to be "biweekly".

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=152903&siteId=1