如何根据 1 小时间隔获取时间段

How to get Time Slot based on 1hour interval

我想在数组列表中存储时隙。我有开始时间和结束时间。根据开始时间,它应该创建时隙。 例如,如果开始时间是 09:00AM 并且结束时间是 21:00PM 那么它应该添加到数组列表中,如下所示

09:00AM 10:00AM 11:00AM 12:00PM 13:00PM 14:00PM ..... 很快 21:00PM

所以一个用户预订了 13:00PM 到 15:00PM 个插槽,因此它不应该对另一个用户可用,而其他插槽应该可用。如何将已经预订的时间与新的数组列表进行比较。

代码

    private void getStartHourArray() {

    times = new ArrayList<TimeSlot>();
    Calendar calender = Calendar.getInstance();

    calender.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));

    int ti = calender.get(Calendar.HOUR_OF_DAY);
    int minutes = calender.get(Calendar.MINUTE);

    System.out.println(minutes);

    String[] quarterHours = {
            "00",

            "30",

    };
    boolean isflag = false;


    times = new ArrayList<>();

    for (int i = 9; i < 22; i++) {

        if (ti > 8) {
            for (int j = 0; j < 2; j++) {

                if ((i == ti && minutes < Integer.parseInt(quarterHours[j])) || (i != ti) || isflag == true) {

                    isflag = true;
                    String time = i + ":" + quarterHours[j];
                    if (i < 10) {
                        time = "0" + time;
                    }
                    String hourFormat = i + ":" + quarterHours[j];
                    if (i < 12) {
                        hourFormat = time + " AM";
                    } else
                        hourFormat = time + " PM";

                    TimeSlot t = new TimeSlot();
                    t.time = hourFormat;
                    t.isAvailable = "Available";
                    times.add(t);
                }
            }
        }

    }

    if (times != null) {
        load.setVisibility(View.GONE);

    }


}

时隙模型class

public class TimeSlot {

public String time;
 public String isAvailable;
}

尝试这样的事情:

String firstDate = "26/02/2019";
String firstTime = "00:00 AM";
String secondDate = "26/02/2019";
String secondTime = "12:00 PM";

String format = "dd/MM/yyyy hh:mm a";

SimpleDateFormat sdf = new SimpleDateFormat(format);

Date dateObj1 = sdf.parse(firstDate + " " + firstTime);
Date dateObj2 = sdf.parse(secondDate + " " + secondTime);
System.out.println("Date Start: "+dateObj1);
System.out.println("Date End: "+dateObj2);

long dif = dateObj1.getTime(); 
while (dif < dateObj2.getTime()) {
    Date slot = new Date(dif);
    System.out.println("Hour Slot --->" + slot);
    dif += 3600000;
}

这将为您提供每小时的时间段,将其添加到 ArrayList 中,当任何用户 select 时间然后将其从 ArrayList 中删除并更新到服务器,以便下次使用 用户尝试获取数据,但无法获取第一个 selected 用户时隙。

试试这个:

import java.time.LocalTime;
import java.util.HashMap;
import java.util.Map;

public class PlayGround {

    private Map<LocalTime, Boolean> slots = new HashMap();

    public static void main(String[] args) {
        PlayGround client = new PlayGround();
        client.initializeSlots();

        client.allocateSlots("10:00", "13:00");
        //this shouldn't be available
        client.allocateSlots("11:00", "12:00");
        //not sure if u want this to be available. since it is start when the 1st just finished. 
        client.allocateSlots("13:00", "15:00");
        client.allocateSlots("16:00", "18:00");
    }

    private void initializeSlots() {

        LocalTime time = LocalTime.of(9, 0);
        slots.put(time, true);
        for (int i = 1; i < 24; i++) {
            slots.put(time.plusHours(i), true);
        }
    }

    private void allocateSlots(String strTime, String edTime) {
        LocalTime startTime = LocalTime.parse(strTime);
        LocalTime endTime = LocalTime.parse(edTime);

        while (startTime.isBefore(endTime)) {
            //check if the time slots between start and end time are available
            if (!slots.get(startTime) || !slots.get(endTime)) {
                System.out.println("slots not available" + " start time: " + strTime + " end time: " + edTime);
                return;
            }
            startTime = startTime.plusHours(1);
            endTime = endTime.minusHours(1);
        }

        System.out.println("slots are available" + " start time: " + strTime + " end time: " + edTime);
        //then here u can mark all slots between to unavailable.
        startTime = LocalTime.parse(strTime);
        endTime = LocalTime.parse(edTime);
        while (startTime.isBefore(endTime)) {
            slots.put(startTime, false);
            slots.put(endTime, false);
            startTime = startTime.plusHours(1);
            endTime = endTime.minusHours(1);
        }
    }

}