Thanks for your answer an sorry for my reply delay, the problem with timezones is not only the daylight saving offset, it is also about when the time changes (and historical changes), because it depends on political decisions for each country, thats why Mexico and US will have different dates for summer time change even if GTM are the same and summer time is the same.
I must say that I don't really understant why you have implemented your own logic to manage conversions, because it is really hard to keep DST up to date, because every year you could have changes around the World, for exemple in Europe, there was a recent change that will allow to each country in the EU to decide if they keep or not the summer time. In France it will be removed the next year I think.
Thats means that your build-in logic is only usefull if we develop for windows applications and I think that the big mayority of Xamarin Forms developpers uses this framework for Android and iOS, not for WPF/UWP.
In fact, I think that is a lot easier for you to have a default timezone name handler that will only use the system TimeZoneInfo.FindTimeZone method and WPF/UWP developpers can implement their own converter (based on Xamarin post).
I think something like that :
public interface ITimeZoneHandler
TimeZone Parse(string timezone);
And we can set a custom handler by calling :