My requirement here is fairly standard; I need to allow users to select their current TimeZone and save it against their account. I will then use this value to to convert stored DateTime values to a localised time.
My current thinking is that I will allow users to select a .NET TimeZoneInfo.Id from a list (held in the DB to allow more friendly descriptions but constructed using TimeZoneInfo.GetSystemTimeZones()) - I will then use this value to return the relevant TimeZoneInfo instance using TimeZoneInfo.FindSystemTimeZoneById() and perform the conversion. The main problem I see here is that TimeZoneInfo.Id is a value held in the registry and is not a "standard" Id (compared to Olson for example). As such, it is possible that server updates/migrations may invalidate the stored Ids completely and break the conversions..
In short - is this approach valid/safe? If not, is there a better way of storing a users timezone preference while also handling daylight savings etc without tons of additional logic?