Can You Determine Timezone from Request Variables? Can You Determine Timezone from Request Variables? asp.net asp.net

Can You Determine Timezone from Request Variables?


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.

  1. 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.

  2. Or use JavaScript to get the time zone offset as part of a form submission/redirect when the user enters the site. This is the browser's current offset, but not necessarily the visitor's preferred zone. Use this value as a default; store in another session cookie.

    <script type="text/javascript" language="JavaScript">var offset = new Date();document.write('<input type="hidden" id="clientTzOffset" name="clientTzOffset" value="' + offset.getTimezoneOffset() + '"/>');</script>
  3. 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.


In any of the events prior to Page Unload...Request.ServerVariables. If you want their physical timezone then you check their IP address and use an IP to Geo-Location conversion tool.

I'm not sure if there's another way you can do it, so if you require the timezone their computer is configured for, it would have to wait for the page load for a javascript...


We can get the time zone using the below code in server side instead of sending value from client.

private TimeZoneInfo GetRequestTimeZone()    {        TimeZoneInfo timeZoneInfo = null;        DateTimeOffset localDateOffset;        try        {            localDateOffset = new DateTimeOffset(Request.RequestContext.HttpContext.Timestamp, Request.RequestContext.HttpContext.Timestamp - Request.RequestContext.HttpContext.Timestamp.ToUniversalTime());            timeZoneInfo = (from x in TimeZoneInfo.GetSystemTimeZones()                            where x.BaseUtcOffset == localDateOffset.Offset                            select x).FirstOrDefault();        }        catch (Exception)        {        }        return timeZoneInfo;    }

Thanks...