Java 具有完美字符串的SimpleDataFormat异常
以下代码给出了此异常:Java 具有完美字符串的SimpleDataFormat异常,java,android,exception,simpledateformat,Java,Android,Exception,Simpledateformat,以下代码给出了此异常: PID: 8473 java.lang.IllegalArgumentException: Not a valid time, expecting HH:MM:SS format 我想做的是检查给定的时间是否介于两次之间。 我已经设法创建了一个简单的方法,但是当我尝试在20:00-04:00之间进行检查时,它出错了,所以一旦它超过了00:00,
PID: 8473
java.lang.IllegalArgumentException: Not a valid time, expecting HH:MM:SS format
我想做的是检查给定的时间是否介于两次之间。
我已经设法创建了一个简单的方法,但是当我尝试在20:00-04:00之间进行检查时,它出错了,所以一旦它超过了00:00,它就错了,所以我来到这里,发现:
public static boolean isTimeBetweenTwoTime(String argStartTime,
String argEndTime, String argCurrentTime) throws ParseException {
String reg = "^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
//
if (argStartTime.matches(reg) && argEndTime.matches(reg)
&& argCurrentTime.matches(reg)) {
boolean valid = false;
// Start Time
java.util.Date startTime = new SimpleDateFormat("HH:mm:ss")
.parse(argStartTime);
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startTime);
// Current Time
java.util.Date currentTime = new SimpleDateFormat("HH:mm:ss")
.parse(argCurrentTime);
Calendar currentCalendar = Calendar.getInstance();
currentCalendar.setTime(currentTime);
// End Time
java.util.Date endTime = new SimpleDateFormat("HH:mm:ss")
.parse(argEndTime);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endTime);
//
if (currentTime.compareTo(endTime) < 0) {
currentCalendar.add(Calendar.DATE, 1);
currentTime = currentCalendar.getTime();
}
if (startTime.compareTo(endTime) < 0) {
startCalendar.add(Calendar.DATE, 1);
startTime = startCalendar.getTime();
}
//
if (currentTime.before(startTime)) {
System.out.println(" Time is Lesser ");
valid = false;
} else {
if (currentTime.after(endTime)) {
endCalendar.add(Calendar.DATE, 1);
endTime = endCalendar.getTime();
}
System.out.println("Comparing , Start Time /n " + startTime);
System.out.println("Comparing , End Time /n " + endTime);
System.out
.println("Comparing , Current Time /n " + currentTime);
if (currentTime.before(endTime)) {
System.out.println("RESULT, Time lies b/w");
valid = true;
} else {
valid = false;
System.out.println("RESULT, Time does not lies b/w");
}
}
return valid;
} else {
throw new IllegalArgumentException(
"Not a valid time, expecting HH:MM:SS format");
}
}
它工作得很好,但是当我以我需要的方式进入vars时,它不工作,异常被传递
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int dayOfTheWeek = calendar.get(Calendar.DAY_OF_WEEK);
int fromHour = biz.getOpeningHours().get(dayOfTheWeek-1).getFromHour();
int fromMinute = biz.getOpeningHours().get(dayOfTheWeek-1).getFromMinute();
int toHour = biz.getOpeningHours().get(dayOfTheWeek-1).getToHour();
int toMinute = biz.getOpeningHours().get(dayOfTheWeek-1).getToMinute();
boolean insideTime = false;
try {
String start = ""+adjustText(fromHour)+":"+adjustText(fromMinute)+":00";
String end = ""+adjustText(toHour)+":"+adjustText(toMinute)+":00";
String current = ""+adjustText(hour)+":"+""+adjustText(minute)+":00";
//String start = "12:00:00";
//String end = "15:00:00";
//String current = "14:00:00";
insideTime = isTimeBetweenTwoTime(start,end,current);
} catch (ParseException e) {
e.printStackTrace();
}
这是调整文本的方法:
public String adjustText(int adjustTimeNumber){
String a = "";
if (adjustTimeNumber == 0) {
a = ""+ adjustTimeNumber + "0";
} else if (adjustTimeNumber > 0 && adjustTimeNumber < 10) {
a = "0" + adjustTimeNumber;
} else {
a = adjustTimeNumber+"";
}
return a;
}
公共字符串adjustText(int adjustTimeNumber){
字符串a=“”;
如果(adjustTimeNumber==0){
a=“”+adjustTimeNumber+“0”;
}否则如果(adjustTimeNumber>0&&adjustTimeNumber<10){
a=“0”+调整时间编号;
}否则{
a=调整时间编号+“”;
}
返回a;
}
请帮助我,我不明白,字符串
非常完美,但由于某些原因它不起作用。我会避免将日期对象转换为字符串,然后将字符串解析回时间对象,这感觉是不必要的
试试这个:
// I assume your "time" object is called TimeObj, change it to the correct name in your implementation
Calendar now = Calendar.getInstance();
int dayOfTheWeek = calendar.get(Calendar.DAY_OF_WEEK);
TimeObj t = biz.getOpeningHours().get(dayOfTheWeek-1);
Calendar from = Calendar.getInstance();
from.set(Calendar.HOUR_OF_DAY, t.getFromHour());
from.set(Calender.MINUTE, t.getFromMinute());
from.set(Calender.SECOND, 0);
Calendar to = Calendar.getInstance();
to.set(Calendar.HOUR_OF_DAY, t.getToHour());
to.set(Calender.MINUTE, t.getToMinute());
to.set(Calender.SECOND, 0);
if (from.after(to)) {
// this means to "to" is after midnight, add a day to "to"
to.set(DATE, to.get(DATE) + 1);
}
boolean insideTime = now.after(from) && now.before(to);
请缩小问题范围并发布a,但是如果from时间是18:00,to时间是03:00,所以是第二天,currentTime是1:00,那么insideTime将返回False,我添加了一些改进,使用后和前而不是比较到,现在可读性更强。
// I assume your "time" object is called TimeObj, change it to the correct name in your implementation
Calendar now = Calendar.getInstance();
int dayOfTheWeek = calendar.get(Calendar.DAY_OF_WEEK);
TimeObj t = biz.getOpeningHours().get(dayOfTheWeek-1);
Calendar from = Calendar.getInstance();
from.set(Calendar.HOUR_OF_DAY, t.getFromHour());
from.set(Calender.MINUTE, t.getFromMinute());
from.set(Calender.SECOND, 0);
Calendar to = Calendar.getInstance();
to.set(Calendar.HOUR_OF_DAY, t.getToHour());
to.set(Calender.MINUTE, t.getToMinute());
to.set(Calender.SECOND, 0);
if (from.after(to)) {
// this means to "to" is after midnight, add a day to "to"
to.set(DATE, to.get(DATE) + 1);
}
boolean insideTime = now.after(from) && now.before(to);