2017-06-08 76 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