We're all aware that magic numbers (hard-coded values) can wreak havoc in your program, especially when it's time to modify a section of code that has no comments, but where do you draw the line?  

For instance, if you have a function that calculates the number of seconds between two days, do you replace

seconds = num_days * 24 * 60 * 60


with

seconds = num_days * HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE


At what point do you decide that it is completely obvious what the hard-coded value means and leave it alone?

There are two reasons to use symbolic constants instead of numeric literals:


To simplify maintenance if the magic numbers change.  This does not apply to your example.  It is extremely unlikely that the number of seconds in an hour, or the number of hours in a day will change.
To improve readibility.  The expression "24*60*60" is pretty obvious to almost everyone.  "SECONDS_PER_DAY" is too, but if you are hunting a bug, you may have to go check that SECONDS_PER_DAY was defined correctly.  There is value in brevity.    


For magic numbers that appear exactly once, and are independent of the rest of the program, deciding whether to create a symbol for that number is a matter of taste.  If there is any doubt, go ahead and create a symbol.  

Do not do this:

public static final int THREE = 3;

