Question: I'm storing the user's timezone as a decimal in the session. For instance, if the user is in the EST timezone, I'd have 

```
UserTimeZone = -5.00;

```

The data in the database is stored in UTC, so I want to calculate the beginning and the end of the day for that user so that when the user wants his data for a specific day, the records are timezone adjusted.

This is what I'm doing:

```
DateTime StartDate =  DateTime.Now.ToUniversalTime();

StartDate = StartDate.AddHours((double)UserTimeZone);
StartDate = StartDate.Date;
StartDate = StartDate.AddHours((double)UserTimeZone);

DateTime EndDate = StartDate.AddHours(24);

```

The problem I'm having is that this doesn't account for daylight saving time so even thought EST time is 5 hours behind UTC, for the moment it's actually 4 hours behind UTC because of the daylight saving shift.

What are some of your suggestions? Thanks.

Answer: 
I would recommend adding a timezone to the users settings and storing that. Timezones have different times depending on the time of year. you can provide a list of time zones for the user to choose from by using the [TimeZoneInfo.GetSystemTimeZones](http://msdn.microsoft.com/en-us/library/system.timezoneinfo.getsystemtimezones.aspx) method. You can store any date as UTC and convert it (with the [TimeZoneInfo.ConvertTime](http://msdn.microsoft.com/en-us/library/bb382770.aspx) method) to the users time when displaying, and convert it back to UTC when saving it. This will allow the user to change their timezone at any time without causing problems. If you follow this format you should not run into any problems. 

Be forewarned, if you do not store the dates as UTC and convert as suggested above you may run into problems. In some time zones certain times do not exist on certain days when changing from daylight savings time to standard time. The TimeZoneInfo class does not play nice with these non-existent times.
You need time-zone file <http://www.twinsun.com/tz/tz-link.htm>  

`Record all you time in UTC/GMT.`

Day Light saving is not consistent, countries change their DLS rule.  

Hence your application will need up-to-date Tz file at all the time.

Your user should choose `Time-Zone name` when signing up and not time-offset. Because two regions can have same time offset (sometimes with DLS).

With `Tz Name` you can know  

- what **country/region** user belongs to;  

- what is `his time offset`;  

- and what is `his DLS offset`,  

`add these both` to get users current time.

Known Issue: Time in history cannot be converted to actual time if you don't have historic DLS details, as these may not be valid at that historic time.