I'm working on an ASP.NET/C# application, which supports time zones.
First let me explain the flow of the application, I'm storing an object for purchase order. So it has the datetime field in it.
I'm storing that datetime as UTC in Database, and binding it in grid (according to the client's timezone).
In the Page_Init method of the first page, I had used a javascript code which will detect the client's timezone, and return appropriate offset.
In the Page_Load method, I'm getting that javascript return value (offset) and comparing it with the offset of each zone in TimeZoneInfo.GetSystemTimeZones().
When comparing the offset, I'm getting a TimeZoneInfo object (for example) "(UTC-08:00) Baja California", "(UTC +05:30) Chennai,Kolkata"
Using that particular TimeZoneInfo object, I'm converting the UTC datetime (which is stored in DB) to the client's timezone.
As by the above flow, the application works fine for some timezones.
The problem is, if when I change timezone of client machine to (UTC -8:00), the client machine shows the timezone name as "(UTC-08:00) Pacific Time (US & Canada)" but in application the timezone differs from the client system it shows as "(UTC-08:00) Baja California".
And importantly DST changes are not reflecting when I convert the UTC to Local. TimeZoneInfo.ConvertTimeFromUtc(DateTime, clientTimezone);
Note: I'm not storing Timezone information of client in database or anywhere. So everytime if a user enters the application, the application will recognize the timezone and it will react according to it.
My question is:
Whether the TimeZoneInfo class can work automatically work according to the adjusment rule, when we convert from UTC to Local?
Do we have to detect the DST for particular datetime using the method
TimeZoneInfoObject.IsDaylightSavingTime(DateTime)and do conversion?Is there any other classes in .Net which can sync with windows timezones?