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?