Как указать следующий рабочий день, если у меня есть собственный календарь API - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу указать следующий рабочий день для данного дня, используя java. НО условия продолжают увеличиваться, когда я использую собственный календарь api для манипулирования датами, поскольку мне приходилось учитывать обычные выходные и указание на следующий день, а также мне приходилось учитывать региональные праздники в моем регионе.

Потому что я должен передать дату в календарь API, чтобы проверить, работает ли день или нет. Если день работает, то хорошо. Если день является выходным, как я могу получить следующий рабочий день (потому что я должен передать дату в API, чтобы проверить, является ли это выходным или нет). Должен ли я использовать бесконечный l oop и продолжать нажимать на api, увеличивая день каждый раз. и каждый раз проверяйте ответ API

Если я использую Restapi, это внешний API, который мы должны использовать для проверки праздников. Я не могу сохранить праздничные дни в базе данных.

Если 27-е, 28-е - выходной, а 29-е работает, как я могу передать даты в этот API.

Запрос API:

 {
    "Data": {

        "Date": "27/04/2020"
    }
 }

Ответ API:

{
  "Data": {
    "Holidaystatus":"Is Holiday"
  }
}

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Попробовав все, я нашел это.

public static String incrementDaysExcludingWeekends(String format,String datetoincrement,String daystoincrement) throws ParseException, IOException {
    // format of date is passed as an argument
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    // base date which will be incremented
    String dateStr = datetoincrement;
    Date date = sdf.parse(dateStr);
    Calendar c = Calendar.getInstance();
    // set calendar time with given date
    c.setTime(date);
    // number of days to increment
    int maxIncrement = Integer.parseInt(daystoincrement);
    // add days to date 
    c.add(Calendar.DAY_OF_WEEK, maxIncrement);
    // check if the date after addition is a working day. 
    // If not then keep on incrementing it till it is a working day
    while(!isWorkingDay(c.getTime(), c)) {
        c.add(Calendar.DAY_OF_WEEK, 1);
    }
      return sdf.format(c.getTime());
}

private static boolean isWorkingDay(Date date, Calendar calendar) throws IOException {
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");

    // set calendar time with given date
    HolidayApiImpl holiday = new HolidayApiImpl();
    JSONObject insidejson = new JSONObject();
    insidejson.put("BankingDate", df.format(date));
    JSONObject datajson = new JSONObject();
    datajson.put("Data", insidejson);
    String holidayapi = holiday.holidayapi(datajson.toString());

    JSONObject holidayjson = new JSONObject(holidayapi);
    String holidaydata = holidayjson.getJSONObject("Data").getString("HolidayStatus");
    calendar.setTime(date);


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

    if(holidaydata.equals("HoliDay")) {

        return false;


    }
    return true;
 }

Спасибо Бери, за предложения.

0 голосов
/ 27 апреля 2020

Вам необходимо создать структуру данных (таблицу «Карта» или «База данных»), содержащую пары: <holiday start day, holiday end day> Не забудьте включить выходные .

Так что в вашем примере вы сохраните запись

<27/04/2020,28/04/2020>

Вам не нужно повторять в течение нескольких дней, просто. сохранить весь период как одну запись.

Теперь поиск следующего рабочего дня можно описать с помощью простых шагов:

  1. получить дату ввода
  2. , если день не существует в структуре данных. - это рабочий день
  3. , если день существует в структуре, получить значение для данного дня (конец праздника) и добавить один день, потому что следующий день после праздника - рабочий день

При таком подходе вам нужно делать больше операций при добавлении нового отпуска. Это очень похоже:

  1. Проверьте, если праздник уже существует, если да, то ничего не делайте.
  2. Проверьте день после и до - если праздник существует, добавьте этот день к этому holiday (merge).

Вы можете создать еще один REST API для добавления выходных.

Если вы используете Jdk8 +, вы можете использовать поддержку LocalDate:

    LocalDate now = LocalDate.now();
    boolean isWeekend = now.getDayOfWeek() == DayOfWeek.SUNDAY || now.getDayOfWeek() == DayOfWeek.SATURDAY;
...