Android Java If Time Between Two Times Error

Curtis Boylan :

I am using a JSON file to store multiple entries for a conference. I am trying to get the current event that is on using date.before and date.after in a Calendar object in Java. My current code is returning three different events and I have no idea, I am wondering of anyone has any suggestions i've tried just about everything. I will attach the JSON and code below. I will also attach what the code puts into the console window.

Console Log

11-22 15:54:12.883 5797-5797/reloaded D/timetest:
    add event with name:Coffee Break
    time start: Tue Nov 22 15:30:00 GMT+00:00 18
    time end: Wed Nov 23 16:30:00 GMT+00:00 18
    time now: Wed Nov 23 15:45:00 GMT+00:00 18
11-22 15:54:12.885 5797-5797/reloaded D/timetest:
    add event with name:Panel Discussion
    time start: Tue Nov 22 16:30:00 GMT+00:00 18
    time end: Wed Nov 23 17:15:00 GMT+00:00 18
    time now: Wed Nov 23 15:45:00 GMT+00:00 18
11-22 15:54:12.888 5797-5797/reloaded D/timetest:
    add event with name:Turning Information into an Engaging Experience – The Design of Media Spaces
    time start: Tue Nov 22 17:15:00 GMT+00:00 18
    time end: Wed Nov 23 18:00:00 GMT+00:00 18
    time now: Wed Nov 23 15:45:00 GMT+00:00 18

JSON

{
      "eventid": "11",
      "roomid": "9",
      "type": "other",
      "name": "Coffee Break",
      "timestart": "15:30",
      "timeend": "16:30",
      "day": "1",
      "text": "Discover the Future Forum",
      "pic": "coffeecup.png",
      "speakerid": "1",
      "speaker": ""
    },
    {
      "eventid": "12",
      "roomid": "9",
      "type": "other",
      "name": "Panel Discussion",
      "timestart": "16:30",
      "timeend": "17:15",
      "day": "1",
      "text": "",
      "pic": "welcometalk.png",
      "speakerid": "1",
      "speaker": "fudged"
    },
    {
      "eventid": "13",
      "roomid": "9",
      "type": "lecture",
      "name": "Turning Information into an Engaging Experience – The Design of Media Spaces",
      "timestart": "17:15",
      "timeend": "18:00",
      "day": "1",
      "text": "fdsfsd",
      "pic": "p4.jpg",
      "speakerid": "6",
      "speaker": "test"
    },

Java

try {
    String string1 = "22/11/18 " + c.getString("timestart");
    Date time1 = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(string1);
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTime(time1);

    String string2 = "22/11/18 " + c.getString("timeend");
    Date time2 = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(string2);
    Calendar calendar2 = Calendar.getInstance();
    calendar2.setTime(time2);
    calendar2.add(Calendar.DATE, 1);

    String someRandomTime = "22/11/18 15:45";
    Date d = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(someRandomTime);
    Calendar calendar3 = Calendar.getInstance();
    calendar3.setTime(d);
    calendar3.add(Calendar.DATE, 1);

    Date now = calendar3.getTime();

    Date timestart = calendar1.getTime();
    Date timeend = calendar2.getTime();

    if ((now.after(timestart)) && (now.before(timeend))) {
        Log.d("timetest","add event with name:"+c.getString("name") + " time start: " + timestart+ " time end " + timeend + " time now " + now);
    }
}
catch (ParseException e) {
    e.printStackTrace();
}
MC Emperor :

You should use the new Java Date & Time API, made available in the java.time package. The old Date and Calendar classes are flawed and obsolete.

If you are only working with times, then you could use the LocalTime class to see if a certain time lies between two other times:

// First, parse the times
DateTimeFormatter f = DateTimeFormatter.ofPattern("HH:mm");
LocalTime startTime = LocalTime.parse(c.getString("timestart"), f);
LocalTime endTime = LocalTime.parse(c.getString("timeend"), f);

// Then check if now is between those two times
LocalTime now = LocalTime.now();
if (now.isAfter(startTime) && now.isBefore(endTime)) {
    ...
}

Or tell people when the event will start if it has not been started yet:

if (now.isBefore(startTime)) {
    Duration d = Duration.between(now, startTime);
    System.out.println("Event starting in about " + d);
}
else if (now.isBefore(endTime)) {
    System.out.println("Event is now going on");
}
else {
    System.out.println("Event has passed");
}

Note: I assume that the events do not repeat themselves every day at the specified time, so you might consider to store not only times, but also dates. You could store the timestamp as an integer, but formats like 2018-11-23T11:57:03+01:00 are also widely used. You can then easily parse them using the DateTimeFormatter class.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=128469&siteId=1