Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有完美字符串的SimpleDataFormat异常_Java_Android_Exception_Simpledateformat - Fatal编程技术网

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);