I have just been wading through this issue myself. And while I can't answer all of your questions, I may help you avoid a couple potential pitfalls.
First, the way the database stores time zones is somewhat dependent on the database you are using. So be sure to check your documentation.
Second, many database have different data types for storing a time. I know in Oracle and PostgreSQL they both have something like:
timestamp with time zone
timestamp without time zone
For an explanation and sample code, check out this slightly old but useful Oracle discussion:
http://www.databasejournal.com/features/oracle/article.php/3072991
So what to do? The best that I have come up with is the following:
1. Set your database to believe it is in GMT time zone (Time zone 0)
2. Use the data column type timestamp
without time zone
3. Use code in your front end to convert to/from GMT when messing with the database. At this point, the time zone conversion just becomes a display issue.
Hope this helps and points you in the right direction.