pointing to previous working day using java

前端 未结 4 1165
北恋
北恋 2020-12-18 03:43

I am new with using java.calendar.api. I want to point to the previous working day for a given day using java. BUT the conditions goes on increasing when i am using calend

4条回答
  •  爱一瞬间的悲伤
    2020-12-18 04:11

    You may define a class as below:

    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     *
     * @author j.james
     */
    public class MyCalendar {
    
        private static Map holidays = null;
        private static MyCalendar myCalendar = null;
        private static final int WEEKEND_1 = Calendar.SATURDAY;
        private static final int WEEKEND_2 = Calendar.SUNDAY;
    
        private MyCalendar() {
            holidays = new HashMap();
            holidays.put("7,4", "Independence Day");
            holidays.put("12,25", "Christmas");
    
            //holidays.putAll(DBUtils.readAnyDynamicHolidaysFromDB());
        }
    
        public static Date getPreviousWorkingDay(Date date) {
    
            Date previousWorkingDate = null;
            try {
                if (myCalendar == null) {
                    myCalendar = new MyCalendar();
                }
    
                if(date != null) {
                    Calendar calInstance = Calendar.getInstance();
                    calInstance.setTime(date);
                    int weekDay = 0;
    
                    do {
                        calInstance.add(Calendar.DATE, -1);
                        weekDay = calInstance.get(Calendar.DAY_OF_WEEK);
                    } while(weekDay == WEEKEND_1 || weekDay == WEEKEND_2 ||
                            holidays.get((calInstance.get(Calendar.MONTH) + 1)
                            + "," + calInstance.get(Calendar.DATE)) != null);
    
                    previousWorkingDate = calInstance.getTime();
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return previousWorkingDate;
        }
    }
    

    You can make a call as

    public static void main(String[] args) {
            System.out.println(MyCalendar.getPreviousWorkingDay(new Date(2011-1900,6,5))); //July 5, 2011 which returns July 1 as the working day because July 4th 2011 is Monday
    }
    

提交回复
热议问题