获取Java中一年中的所有双周日期

时间:2019-01-23 10:06:23

标签: java

我想计算一年的双周日期。所以我应该每个月得到两个约会。

到目前为止,我已经很累了-

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);
        }
    }

但是它没有给出正确的日期,它给出了以下输出-

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

我如何获得这样的日期-

2019-01-01
2019-01-16
2019-02-01
2019-02-16
.
.

4 个答案:

答案 0 :(得分:2)

  

我想计算一年的双周日期。所以我应该每个月得到两个约会。

不,不一定。一年有52周(略有增加),但只有12个月。每两周一次-每隔一周-每年会给您26或27个日期,而“每月2个日期”则每年给您24个日期。

如果您想在一年中的每个月分别使用第1个和第16个(而不是第15个?),建议您循环执行一次:

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

听起来像这样会为您提供所需的输出-但您应该知道,不是大多数人会理解为“每两周一次”。

答案 1 :(得分:0)

public static List<LocalDate> getAllBiWeeks(int year) {
    List<LocalDate> res = new ArrayList<>(12 * 2);

    for (int month = 1; month <= 12; month++) {
        res.add(LocalDate.of(year, month, 1));
        res.add(LocalDate.of(year, month, 16));
    }

    return res;
}

答案 2 :(得分:0)

对于将来有相同要求的其他人

使用

for (int month = 1; month <= 12; month++) {
            int lastDayOfMonth = YearMonth.of(currentYear, month).lengthOfMonth();
            System.out.println(LocalDate.of(currentYear, month, 1)+" To "+LocalDate.of(currentYear, month, 15)+" , "+LocalDate.of(currentYear, month, 16)+" To "+LocalDate.of(currentYear, month, lastDayOfMonth));
}

我得到了我需要的东西-

2019-01-01 To 2019-01-15 , 2019-01-16 To 2019-01-31
2019-02-01 To 2019-02-15 , 2019-02-16 To 2019-02-28
2019-03-01 To 2019-03-15 , 2019-03-16 To 2019-03-31
2019-04-01 To 2019-04-15 , 2019-04-16 To 2019-04-30
2019-05-01 To 2019-05-15 , 2019-05-16 To 2019-05-31
2019-06-01 To 2019-06-15 , 2019-06-16 To 2019-06-30
2019-07-01 To 2019-07-15 , 2019-07-16 To 2019-07-31
2019-08-01 To 2019-08-15 , 2019-08-16 To 2019-08-31
2019-09-01 To 2019-09-15 , 2019-09-16 To 2019-09-30
2019-10-01 To 2019-10-15 , 2019-10-16 To 2019-10-31
2019-11-01 To 2019-11-15 , 2019-11-16 To 2019-11-30
2019-12-01 To 2019-12-15 , 2019-12-16 To 2019-12-31

答案 3 :(得分:0)

您可以使用lastDayOfMonth()中的TemporalAdjusters方法。示例:

import java.time.LocalDate;
import static java.time.temporal.TemporalAdjusters.lastDayOfMonth;

public class NewClass2 {

    public static void main(String[] args) {
        LocalDate currentYearFirstDate =  LocalDate.of(2019, 01, 01);
        LocalDate currentYearLastDate  =  LocalDate.of(2019, 12, 31);
        for (LocalDate date = currentYearFirstDate; date.isBefore(currentYearLastDate);date = date.plusMonths(1)) { 
            LocalDate firstHalfStart = date;
            LocalDate firstHalfEnd   = date.plusDays(14);
            LocalDate secondHalfStart = date.plusDays(15);
            LocalDate secondHalfEnd   = date.with(lastDayOfMonth());
            System.out.println(firstHalfStart + " to " + firstHalfEnd + " , " + secondHalfStart + " to " + secondHalfEnd);
        }
    }

}