The compiler isn't smart enough to see that your two if-statements cover all possible cases. It's complaining that there might be a path through the method for which there is no return value specified.
The compiler checks your code, but the checks it can do are limited. Remember that it's just a program, not a human being that can think and reason itself out of any arbitrary complex situation.
*edit* I just thought of a possibility. Suppose that the variable weekday is being modified by another thread at the same time the above code is executing. The following might happen: The first if-statement is evaluated and it's false, so we go on to the second if-statement. At that moment, another thread modifies weekday, so that also the second if-statement evaluates to false. Now the method reaches a point where the return value isn't specified.