I don't know how much time my job needs. What runtime should I set?
At first blush, one might think the best idea is to set the shortest possible run time. This actually isn't the best strategy, because if the job does not complete in the time you specify, the outcome is at best annoying (you have to restart the job using the checkpoint files) and at worst it is a loss of the time invested (if the code you are running does not offer restart capability).
If you really have no idea how long a run will take with a new data set for example, you may wish to set the job for a short time, say 0.5 hours, and see how much progress has been made before the job timed out.
It is also fine to set the first such job to run for the maximum: 168 hours (or 72 hours for non-XSEDE jobs), and see what the run time is. In the latter case, it is important to consider how many jobs you wish to start, and how many cpu hours are left in your allocation, since if the potential run time exceeds that amount, further submissions will be blocked from your account.
If I choose a long run time for my job, will I lose the time that isn't used?
No. The account will be temporarily debited for the full potential cost of the job.