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));
請忽略上面的邏輯,如果它看起來笨拙。
此代碼忽略時區的關鍵問題,隱含取決於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