Your current approach is not wrong, but you can do it better by tracking offsets.
When you talk about offsets, it seems you think of them as related to the time zone. But understand that most time zones have two different offsets: one for standard time and one for daylight. Microsoft's timezone identifier for both still has a βStandardβ in the string, so this can be part of the confusion. But the TimeZoneInfo you work with does indeed track both standard and daily shifts.
You need to associate the offset with each individual date and time. And you do this using the DateTimeOffset class in .Net and the DateTimeOffset data type in SQL Server.
If you use them consistently, then you need to transfer to UTC and from UTC.
source share