2017-06-08 35 views
1

我有一个支付支票的应用程序,因为我得到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(...) ?? 
    } 
+0

需要一些澄清。什么是参数? – gnostrenoff

回答

3

我不知道你的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); 

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

+0

我认为最好使用'previousOrSame'(否则如果这个月的最后一天是星期五,它将不起作用) –

+0

@Hugo好点:) – gnostrenoff

2

@gnostrenoff's answer另一种方法是使用TemporalAdjusters.lastInMonth()方法,它给你一周的指定的最后一天,在一个月:

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

while循环的其余部分是一样的@gnostrenoff's answer