2012-04-09 56 views
0

我正在寫一個Java應用程序,我需要執行以下操作。獲取下一個有效日期

我必須避免每週兩天(外部可配置)說TUESDAY和FRIDAY做一些業務邏輯處理。我想找出下一個可用的日子。例如:如果今天是星期二,我應該獲得下一個可用的星期幾,或者如果今天是星期四,那麼下一個可用應該是星期一。

有人可以指導我解決這個問題嗎?這聽起來很簡單,但它確實是三色的。

這裏是我做了什麼至今

 List<String> exceptionDays = new ArrayList<String>(); 
    exceptionDays.add("SUNDAY"); 
    exceptionDays.add("MONDAY"); 
    exceptionDays.add("FRIDAY"); 

    Date today = new Date(); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(today); 

    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); 

    if (dayOfWeek == Calendar.FRIDAY) { 
     calendar.add(Calendar.DATE, 3); 
    } else if (dayOfWeek == Calendar.SATURDAY) { 
     calendar.add(Calendar.DATE, 2); 
    } else { 
     calendar.add(Calendar.DATE, 1); 
    } 
    String strDateFormat = "E"; 
    SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat); 

    strDateFormat = "EEEE"; 
    sdf = new SimpleDateFormat(strDateFormat); 

    Date nextBusinessDay = calendar.getTime(); 
    System.out.println(sdf.format(nextBusinessDay).toUpperCase()); 
    if(exceptionDays.contains(sdf.format(nextBusinessDay).toUpperCase())){ 
     if(sdf.format(nextBusinessDay).toUpperCase().equals("FRIDAY")){ 
      calendar.add(Calendar.DATE, 3); 
     }else if(sdf.format(nextBusinessDay).toUpperCase().equals("SATURDAY")){ 
      calendar.add(Calendar.DATE, 2); 
     } else 
      calendar.add(Calendar.DATE, 1); 


    nextBusinessDay = calendar.getTime(); 
    } 
    DateFormat df = new SimpleDateFormat("dd-MMM-yy"); 
    String format = df.format(nextBusinessDay.getTime()); 
    System.out.println("Today   : " + df.format(today)); 
    try { 
    System.out.println("Next business day: " + df.parse(format)); 

     System.out.println("Next business day: " + df.format(nextBusinessDay)); 

請忽略上面的邏輯,如果它看起來笨拙。

回答

1

簡單使用Calendar

List<Integer> avoidingDays = new ArrayList<Integer>(); 
avoidingDays.add(Calendar.MONDAY); 
Calendar cal = Calendar.getInstance(); 
while(avoidingDays.contains(cal.get(Calendar.DAY_OF_WEEK))){cal.add(Calendar.DATE, 1} 
return cal; 
+0

此代碼忽略時區的關鍵問題,隱含取決於JVM的[當前的默認(http://docs.oracle.com/javase/8/docs/api /java/util/TimeZone.html#setDefault-java.util.TimeZone-)時區,可以隨時通過此JVM的任何線程中的任何代碼進行更改。最好指定所需的/預期的[時區](http://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html)。 – 2015-04-18 20:43:38

相關問題