The TimeExts library probably does most of what you want. I really ought to Haddockify the comments some time . . .