This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Without an L, the result is an integer, because all operands are integers. Since 1000 * 60 * 60 (3600000) is a valid integer, there will be no problems.
If your intermediate result would exceed Integer.MAX_VALUE (2^31-1), then the result would be truncated, and you would get a wrong value. Only then you need an L to inform the compiler that the intermediate result is a long as well so it won't be truncated.