我想计算一年的双周日期。所以我应该每个月得到两个约会。
到目前为止,我已经很累了-
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
.
.
答案 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);
}
}
}