in reply to Lifehack: Tools for Keeping Track of Your Work Hours
I use Task Coach to manage my to-do list. It has a timing function that can be used to start/stop timing on an item with a click of a button. It also supports hierarchical organization of tasks and projects, and you can group items into categories. You can set priority level, start dates, due dates, and reminders. It has some reporting built in but the back end is an XML file so if you knew how to program in a good text parsing/processing language it would be easy to create your own reports. ;-)
That's just a quick overview - there's more to it and it's under active development (the author is a nice guy and open to contributions). I love it.
Coded in Python, released under GNU GPL.