Is there a way to do your timezone offsets on the server side, by reading something in the request over http, instead of sending everything to the client and letting it deal with it?
This is more complicated but I've had to resort to this scenario before because machine and user profile settings sometimes don't match your visitor's preferences. For example, a UK visitor accessing your site temporarily from an Australian server.
Use a geolocation service (e.g MaxMind.com) as suggested by @balabaster, to get the zone matching their IP (Global.Session_Start is best). This is a good match for local ISPs, but not so good for AOL. Store the offset from this in a session cookie.
Allow the visitor to update the zone via a persistent cookie (for anonymous users) and a field in their account profile (if authenticated).
The persistent value #3 from overrides the session values. You can also store the same persistent cookie for authenticated users for displaying times before they login.