【问题标题】:Get Payment dates in a list在列表中获取付款日期
【发布时间】:2023-04-03 21:18:01
【问题描述】:

我有一个付款支票应用程序,我得到 2 个字符串:

String contractBegin = "01-01-2018";
String contractEnd = "31-12-2018";

现在每次付款都必须在每月的最后一个星期五完成。我需要计算这些日期并将其放入列表或数组中。

有没有使用 Java 8 优秀特性的最佳方法?

我从这里开始:

    String contractBegin = "01-01-2018";
    String contractEnd = "31-12-2018";

    LocalDate contractStart = LocalDate.parse(contractBegin, DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    LocalDate contractStop = LocalDate.parse(contractEnd, DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    System.out.println(contractStart);
    System.out.println(contractStop);
    List<LocalDate> payCheck= new ArrayList<>();
    for (int i = 0; i < args.length; i++) {
        payCheck.add(...) ??
    }

【问题讨论】:

  • 需要澄清一下。什么是参数?

标签: arraylist java-8 payment java-time localdate


【解决方案1】:

我不确定您的 args 数组。但是,如果您想在合同开始日期和结束日期之间获得每月的最后一个星期五。我会这样做:

    String contractBegin = "01-01-2018";
    String contractEnd = "31-12-2018";

    LocalDate contractStart = LocalDate.parse(contractBegin, DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    LocalDate contractStop = LocalDate.parse(contractEnd, DateTimeFormatter.ofPattern("dd-MM-yyyy"));

    List<LocalDate> payCheck = new ArrayList<>();
    LocalDate payCheckDate = contractStart;

    while (payCheckDate.isBefore(contractStop)) {
        payCheckDate = payCheckDate
                .with(lastDayOfMonth())
                .with(previousOrSame(DayOfWeek.FRIDAY));
        payCheck.add(payCheckDate);
        payCheckDate = payCheckDate.with(TemporalAdjusters.firstDayOfNextMonth());

    }

    payCheck.forEach(System.out::println);

这会给你每个月的最后一个星期五。

【讨论】:

  • 我觉得还是用previousOrSame比较好(不然最后一天是周五就不行了)
【解决方案2】:

@gnostrenoff's answer 的另一种替代方法是使用 TemporalAdjusters.lastInMonth() 方法,它会为您提供指定月份中一周的最后一天:

// get the last Friday of the month
payCheckDate = payCheckDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY));

while 循环的其余部分与@gnostrenoff's answer 相同。

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 2015-09-23
    • 2013-12-18
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多