一、获取最近交易日
为了方便,我将代码写在一个类下,以供参考:
package test;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class Test {
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// 待确认交易日:15点之前取当前日期,15点之后取下一交易日
String nextDay = sdf.format(new Date());
if (cal.get(Calendar.HOUR_OF_DAY) >= 15) {
if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {
cal.add(Calendar.DAY_OF_MONTH, 3);
nextDay = sdf.format(cal.getTime());
} else {
nextDay = getNextDay(nextDay);
}
}
nextDay = "20150930";
// 时间必须要从小到大排序,否则会出问题
String[] a = {
"20150930", "20151002", "20151003", "20151005", "20151006"};
List<String> holidayList = Arrays.asList(a);
System.out.println("有效的最近交易日nextDay:" + getDayAfterHoliday(nextDay, holidayList));
}
public static String getDayAfterHoliday(String nextDay, List<String> holidayList) {
if (null != holidayList) {
for (int i = 0; i < holidayList.size(); i++) {
if (holidayList.get(i).equals(nextDay)) {
nextDay = getDayAfterHoliday(getNextDay(nextDay), holidayList);
}
}
}
nextDay = getDayExceptWeekend(nextDay);
return nextDay;
}
/**
* 获取下一天
*
* @param day 当前日期yyyyMMdd
* @return
*/
public static String getNextDay(String day) {
Calendar cal = formatYYYYMMDD(day);
cal.add(Calendar.DAY_OF_MONTH, 1);
return sdf.fo