Well, first you need to decide how many buttons you're going to use. You could use 3 buttons ( left, right, ok/esc) and that's very easy.
If you want to use just one button, it's a bit harder but it's possible to do it. Just make some rules like...
Outside menu : short button press = rotate through states , long button press = enter menu
Inside menu : short button press = enter or exit a menu , long button press = advance to next menu option or change value
Then make a rule saying a button pressed for less than 50ms means simple button press , button pressed for more time (let's say 150-250ms) means long button press.
An interrupt based just on state change on a pic will not be able to do this for you so you might have to combine this button press (state change on pin) interrupt with a timed interrupt triggering once every 5-10 ms. It can also be done just with a simple timed interrupt triggering every 5-10ms, instead of complicating yourself with two separate interrupts.
Detect the first push with a "pin state change" interrupt then disable this interrupt and enable the time based interrupt to recheck the button state for the next few ms periods to see if it's a short or a long button press.
As the code determines if it's a short or long button press, update a variable in the main code and disable the timed interrupt as well, so that the main code in the loop can update the menu and do it's job and then re-enable the "pin state change" interrupt pr timed interrupt to detect next button press.
So you could press once (long press) to see menu on display with the first option in many a Back/Exit. This way if user got into wrong menu, he can press once for short period and go back. To change an option in the menu, press and hold button pressed and slowly move through the options the options and take finger off when over a menu option. Press once to select it.
To set time and date you could have on one line HH : MM : SS
When user enters this, he's automatically on HH so you could show it like this [HH]: MM : SS
Keeping the button pressed means incrementing hours up to 23 then reverting back to 0. Press once to move to minutes : HH : [ MM ] : SS ... repeat , you get the idea. When done with the seconds, automatically exit to previous menu.
The detection of short button presses vs long button presses can be quite simple ... put a timer interrupt at 5-10ms and after each interrupt if the button is still pressed add 1 to a counter.
When you detect a 0 (button not pressed), then if the counter was > 2 and less than 10ms (20ms-100ms) then it was a single button press, and update a variable telling the program is short button press and reset the counter .
If you detect a 1 (button pressed), then if counter is > 20-25 (20-25x10 ms) that means button was pressed for more than 200-250ms so it's a long press, update variable telling the program it's long press and reset counter.
In the loop in main program, you just monitor that variable and do your thing updating the screen with the temperature and whatnot (if you're not in the menu). As soon as that variable changes to tell you a small or long press happened, you do your thing (draw menu on screen for example) and reset variable to "no button pressed"
With three buttons, you can reuse the same interrupt function.. trigger every 5-10 ms, check if button is pressed or not .. increment counters to detect if it's short pressed or not, update a variable accordingly. the variable is analyzed in main loop and reset after something is done.