Java 考虑android应用中用户选择反向时间间隔的用例
android应用程序将仅在用户选择的时间间隔内通知用户。Java 考虑android应用中用户选择反向时间间隔的用例,java,android,mysql,time,datetime-comparison,Java,Android,Mysql,Time,Datetime Comparison,android应用程序将仅在用户选择的时间间隔内通知用户。 设置将有两个计时器来存储TIME1和TIME2 我计划按照以下链接的建议,以整数格式存储时间 链接--> 在与当前时间比较时,遵循上述方法:- 用例1 我认为这是最好的方法,但我想知道有没有更好的方法?还是更简单的方法?另外,应该允许用户设置反向时间吗?否则,用户将无法设置午夜间隔。 非常感谢您的帮助。试试下面的帮助课程,我想这正是您想要的 public class CalenderUtil { public s
设置将有两个计时器来存储
TIME1
和TIME2
我计划按照以下链接的建议,以整数格式存储时间
链接-->
在与当前时间比较时,遵循上述方法:- 用例1
我认为这是最好的方法,但我想知道有没有更好的方法?还是更简单的方法?另外,应该允许用户设置反向时间吗?否则,用户将无法设置午夜间隔。
非常感谢您的帮助。试试下面的帮助课程,我想这正是您想要的
public class CalenderUtil {
public static void main(String[] args) {
String TIME_FORMAT = "hh:mm a";
String initialTime, finalTime, currentTime;
initialTime = "9:00 AM"; finalTime = "11:00 AM"; currentTime = "10:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "9:00 AM"; finalTime = "12:00 PM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 AM"; finalTime = "8:00 PM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 AM"; finalTime = "8:00 PM"; currentTime = "11:00 PM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 PM"; finalTime = "8:00 AM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 PM"; finalTime = "8:00 AM"; currentTime = "6:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
}
public static boolean isCurrentTimeBetweenGivenTime(String initialTime, String finalTime, String currentTime, String timeFormat) {
System.out.print("initialTime=" + initialTime + ", finalTime=" + finalTime + ", currentTime=" + currentTime);
boolean valid = false;
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH).format(new Date());
try {
//Start Time
Date inTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + initialTime);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(inTime);
//End Time
Date finTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + finalTime);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(finTime);
Date actualTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + currentTime);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(actualTime);
if (inTime.after(finTime)) {
calendar2.add(Calendar.DATE, 1);
if (actualTime.before(finTime)) {
calendar3.add(Calendar.DATE, 1);
}
}
if ((calendar3.after(calendar1) || calendar3.equals(calendar1))
&& (calendar3.before(calendar2) || calendar3.equals(calendar2))) {
valid = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(" ==> Result:" + valid);
return valid;
}
}
结果:
initialTime=9:00 AM, finalTime=11:00 AM, currentTime=10:00 AM ==> Result:true
initialTime=9:00 AM, finalTime=12:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 PM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=11:00 AM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=6:00 AM ==> Result:true
试试下面的助手类,我想这正是你想要的
public class CalenderUtil {
public static void main(String[] args) {
String TIME_FORMAT = "hh:mm a";
String initialTime, finalTime, currentTime;
initialTime = "9:00 AM"; finalTime = "11:00 AM"; currentTime = "10:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "9:00 AM"; finalTime = "12:00 PM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 AM"; finalTime = "8:00 PM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 AM"; finalTime = "8:00 PM"; currentTime = "11:00 PM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 PM"; finalTime = "8:00 AM"; currentTime = "11:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
initialTime = "8:00 PM"; finalTime = "8:00 AM"; currentTime = "6:00 AM";
isCurrentTimeBetweenGivenTime(initialTime, finalTime, currentTime, TIME_FORMAT);
}
public static boolean isCurrentTimeBetweenGivenTime(String initialTime, String finalTime, String currentTime, String timeFormat) {
System.out.print("initialTime=" + initialTime + ", finalTime=" + finalTime + ", currentTime=" + currentTime);
boolean valid = false;
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.ENGLISH).format(new Date());
try {
//Start Time
Date inTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + initialTime);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(inTime);
//End Time
Date finTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + finalTime);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(finTime);
Date actualTime = new SimpleDateFormat("dd-MM-yyyy " + timeFormat, Locale.ENGLISH)
.parse(currentDate + " " + currentTime);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(actualTime);
if (inTime.after(finTime)) {
calendar2.add(Calendar.DATE, 1);
if (actualTime.before(finTime)) {
calendar3.add(Calendar.DATE, 1);
}
}
if ((calendar3.after(calendar1) || calendar3.equals(calendar1))
&& (calendar3.before(calendar2) || calendar3.equals(calendar2))) {
valid = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(" ==> Result:" + valid);
return valid;
}
}
结果:
initialTime=9:00 AM, finalTime=11:00 AM, currentTime=10:00 AM ==> Result:true
initialTime=9:00 AM, finalTime=12:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 PM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=11:00 AM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=6:00 AM ==> Result:true
您应该以毫秒为单位存储时间。如果以毫秒为单位,您的情况是:2不会发生。为什么?如果用户在时间选择器1中选择22:00,即79200000毫秒,在时间选择器2中选择1小时,即3600000毫秒,其中79200000>3600000,即时间2<时间1的情况2,该怎么办。如果我错了,请纠正我用我说的日期+时间进行选择。我稍微纠正了用例。实际上是时间1>时间2。我首先考虑存储日期+时间历元格式。但由于时代也是特定于日期的,所以被混淆了很多。我不知道该怎么办。因为,如果用户选择4月19日下午3点的日期+时间1和4月19日下午6点的日期+时间2。用户将在当前日期时间为4月19日和3至6日之间收到通知。但是4月3日至6日的20日呢?应该是日期无关的,对吗?任何指南都会很有帮助,谢谢你以毫秒为单位存储时间。如果以毫秒为单位,您的情况是:2不会发生。为什么?如果用户在时间选择器1中选择22:00,即79200000毫秒,在时间选择器2中选择1小时,即3600000毫秒,其中79200000>3600000,即时间2<时间1的情况2,该怎么办。如果我错了,请纠正我用我说的日期+时间进行选择。我稍微纠正了用例。实际上是时间1>时间2。我首先考虑存储日期+时间历元格式。但由于时代也是特定于日期的,所以被混淆了很多。我不知道该怎么办。因为,如果用户选择4月19日下午3点的日期+时间1和4月19日下午6点的日期+时间2。用户将在当前日期时间为4月19日和3至6日之间收到通知。但是4月3日至6日的20日呢?应该是日期无关的,对吗?任何导游都会很有帮助的,谢谢你的帮助!谢谢,我会试试的。有一个疑问,在sql中存储这种时间格式的合适数据类型是什么?非常感谢:)这应该也适用于24小时格式,对吗?“HH:mm”这肯定有帮助!谢谢,我会试试的。有一个疑问,在sql中存储这种时间格式的合适数据类型是什么?非常感谢:)这应该也适用于24小时格式,对吗?“HH:mm”
initialTime=9:00 AM, finalTime=11:00 AM, currentTime=10:00 AM ==> Result:true
initialTime=9:00 AM, finalTime=12:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 AM ==> Result:true
initialTime=8:00 AM, finalTime=8:00 PM, currentTime=11:00 PM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=11:00 AM ==> Result:false
initialTime=8:00 PM, finalTime=8:00 AM, currentTime=6:00 AM ==> Result:true