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: 
You shouldn't be doing any of this. You should just use the TimeZoneInfo built into .net.

For example:

```
TimeZoneInfo.ConvertTimeToUtc();
TimeZoneInfo.ConvertTimeFromUtc();

```

Since you don't seem able to lookup API Parameters, here you go:

<http://msdn.microsoft.com/en-us/library/system.timezoneinfo.converttimefromutc.aspx>

<http://msdn.microsoft.com/en-us/library/bb381744.aspx>
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.