Android Java 如果两次之间的时间错误
Android Java If Time Between Two Times Error
我正在使用 JSON 文件来存储会议的多个条目。我正在尝试获取在 Java 中的日历 object 中使用 date.before 和 date.after 的当前事件。我当前的代码返回三个不同的事件,我不知道,我想知道任何人有任何建议我已经尝试过几乎所有的事情。我将在下面附上 JSON 和代码。我还将附上代码放入控制台的内容 window.
控制台日志
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();
}
就像我在评论部分提到的:
您可以将时间转换为毫秒,然后检查当前时间是否大于事件的开始时间。如果是,您将 return 数据。
像这样:
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);
//Convert event time to milliseconds
int timestart = calendar1.get(Calendar.MILLISECOND);
//Get current time in milliseconds
Calendar calendarCurrent = Calendar.getInstance();
calendarCurrent.setTime(new Date());
int now = calendar.get(Calendar.MILLISECOND);
//Check if the event time is greater then the current time
if (timestart > now) {
Log.d("timetest - ",+"Event "+c.getString("name")+" already started");
}else{
Log.d("timetest - ",+"Event "+c.getString("name")+" has not started yet");
}
} catch (ParseException e) {
e.printStackTrace();
}
重要提示:
我还建议将事件的日期和时间以毫秒为单位存储在数据库中,而不是对其进行硬编码。在我的回答中,为了演示目的,我做了像你那样做的。
如果您将开始时间和结束时间存储为毫秒,您将能够确定事件开始前的剩余时间,例如this。
您应该使用新的 Java 日期和时间 API,在 java.time
包中可用。 旧的 Date
和 Calendar
class 是 flawed 并且已过时。
如果您只处理时间,那么您可以使用 LocalTime
class 查看某个时间是否介于其他两个时间之间:
// 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)) {
...
}
或者如果活动还没有开始就告诉人们什么时候开始:
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");
}
注意:我假设事件不会每天在指定时间重复,因此您可能会考虑不仅存储时间,还存储日期。您可以将时间戳存储为整数,但 2018-11-23T11:57:03+01:00
等格式也被广泛使用。然后,您可以使用 DateTimeFormatter
class.
轻松解析它们
我正在使用 JSON 文件来存储会议的多个条目。我正在尝试获取在 Java 中的日历 object 中使用 date.before 和 date.after 的当前事件。我当前的代码返回三个不同的事件,我不知道,我想知道任何人有任何建议我已经尝试过几乎所有的事情。我将在下面附上 JSON 和代码。我还将附上代码放入控制台的内容 window.
控制台日志
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();
}
就像我在评论部分提到的:
您可以将时间转换为毫秒,然后检查当前时间是否大于事件的开始时间。如果是,您将 return 数据。
像这样:
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);
//Convert event time to milliseconds
int timestart = calendar1.get(Calendar.MILLISECOND);
//Get current time in milliseconds
Calendar calendarCurrent = Calendar.getInstance();
calendarCurrent.setTime(new Date());
int now = calendar.get(Calendar.MILLISECOND);
//Check if the event time is greater then the current time
if (timestart > now) {
Log.d("timetest - ",+"Event "+c.getString("name")+" already started");
}else{
Log.d("timetest - ",+"Event "+c.getString("name")+" has not started yet");
}
} catch (ParseException e) {
e.printStackTrace();
}
重要提示:
我还建议将事件的日期和时间以毫秒为单位存储在数据库中,而不是对其进行硬编码。在我的回答中,为了演示目的,我做了像你那样做的。
如果您将开始时间和结束时间存储为毫秒,您将能够确定事件开始前的剩余时间,例如this。
您应该使用新的 Java 日期和时间 API,在 java.time
包中可用。 旧的 Date
和 Calendar
class 是 flawed 并且已过时。
如果您只处理时间,那么您可以使用 LocalTime
class 查看某个时间是否介于其他两个时间之间:
// 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)) {
...
}
或者如果活动还没有开始就告诉人们什么时候开始:
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");
}
注意:我假设事件不会每天在指定时间重复,因此您可能会考虑不仅存储时间,还存储日期。您可以将时间戳存储为整数,但 2018-11-23T11:57:03+01:00
等格式也被广泛使用。然后,您可以使用 DateTimeFormatter
class.