2016-04-06 10 views
1

Ich arbeite derzeit an einer HR system und es hat eine Option für get 10 consecutive days (working days except weekends) von Leave in seinem Urlaubsmanagement-Modul. Es ist eine J2EE-Anwendung.Get 'N' Anzahl der aufeinander folgenden Wochentage ab dem angegebenen Datum

Alles, was ich will, ist get 'N' number of consecutive weekdays from the given date

Hat jemand weiß, wie dieses Problem zu erreichen?

P. S: Ich verwende keine 3rd-Party-Bibliotheken nicht wie JodaTime ..

Hier Code für Tag verlassen Anwendung mein Controller ist. Es hat nichts mit den aufeinanderfolgenden Tagen zu tun. aber hier dieses Posting zu beweisen, dass ich es ernst etwas mache ..

if (action.equals("applyLeave")) { 

    Leave l = new Leave(); 

    int userid = Integer.parseInt(request.getParameter("userid")); 
    int leavetype = Integer.parseInt(request.getParameter("leavetype")); 
    String from = request.getParameter("from"); // from time 
    String to = request.getParameter("to"); // to time 
    double total = Double.parseDouble(request.getParameter("total")); // total hours 

    String r1 = request.getParameter("rep1"); 
    String r2 = request.getParameter("rep2"); 

    if (r1 == null || r1.isEmpty()) { 
     r1 = "0"; 
    } 

    if (r2 == null || r2.isEmpty()) { 
     r2 = "0"; 
    } 

    int rep1 = Integer.parseInt(r1); 
    int rep2 = Integer.parseInt(r2); 

    String reason = request.getParameter("reason"); 
    String date = request.getParameter("date"); 

    l.setUser(userid); 
    l.setLeavetype(leavetype); 
    l.setDate(date); 
    l.setFrom(from); 
    l.setReason(reason); 
    l.setRep1(rep1); 
    l.setRep2(rep2); 
    l.setTo(to); 
    l.setTotal(total); 

    dao.saveLeave(l); 

    // get manager of the department 
    UserDao udao = (UserDao) ctx.getBean("udao"); 
    DepartmentDao ddao = (DepartmentDao) ctx.getBean("depdao"); 
    NotificationDao notificationDao = (NotificationDao) ctx.getBean("notificationDao"); 
    User u = udao.getUserByUserID(userid).get(0); 
    int department = u.getDepartment(); 
    Department d = ddao.getDepartmentByID(department).get(0); 
    int manager = d.getManager(); 

    // save a notification for the respective manager 
    // insert notification 
    String text = u.getFirstname() + " " + u.getLastname() + " has applied for a leave"; 
    Notification n = new Notification(); 
    n.setUserid(manager); 
    n.setFk(dao.getLeaveID()); 
    n.setType(3); 
    n.setText(text); 
    notificationDao.saveNotification(n); 

    PrintWriter out = res.getWriter(); 
    res.setContentType("text/html"); 
    Gson gson = new Gson(); 
    JsonObject myObj = new JsonObject(); 
    myObj.add("message", gson.toJsonTree("Successfully Inserted")); 
    out.println(myObj.toString()); 
    out.close(); 

} 
+0

@Psioniax habe ich die meisten Dinge in der Anwendung erfolgreich abgeschlossen, aber ich bin zu kämpfen diese aufeinander folgenden Tagen zu erhalten. Ich habe nach Google für eine Lösung gesucht, aber ich konnte keine finden .. –

+0

Bearbeiten Sie Ihre Frage, um einige Code –

+0

@Psioniax, bearbeitet mit dem Code –

Antwort

1
List<Date> holidays = conf.getHolidays(); 
List<Date> nWorkingDays = new ArrayList<>(); 

// get the current date without the hours, minutes, seconds and millis 
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 

// iterate over the dates from now and check if each day is a business day 
int businessDayCounter = 0 
while (businessDayCounter < n) { //You want n working days 
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); 
    if (dayOfWeek != Calendar.SATURDAY && dayOfWeek != Calendar.SUNDAY && !holidays.contains(cal.getTime())) { 
     businessDayCounter++; 
     nWorkingDays.add(cal.getTime()); 
    } 
    cal.add(Calendar.DAY_OF_YEAR, 1); 
} 

return nWorkingDays; 

aus dieser Antwort Angepasst: https://stackoverflow.com/a/15626124/1364747

+0

Es hat funktioniert. Vielen Dank ! –

1

Nicht sicher, ob Sie die Lösung in Standard-Java erfordern (mit Javascript markiert nämlich), aber ich denke, man könnte es wie folgt tun:

WARNUNG: Dieses Beispiel wurde nicht kompiliert oder ausgeführt, daher können Ausnahmen auftreten.

Verwandte Themen