At the end of the day, I went through a lot of pain to figure this out and ended up with a converter on the Web and NOT on the android or device:
private TimeZoneInfo ConvertTimeZone(string timeZoneString)
{
ReadOnlyCollection<TimeZoneInfo> timeZoneInfos = TimeZoneInfo.GetSystemTimeZones();
if (Regex.IsMatch(timeZoneString, "[A-Z]{3,5}[0-9]{0,2}") && !Regex.IsMatch(timeZoneString, "[A-Z]{3,5}[-]{1}[0-9]{0,2}"))
{
List<string> abbreviations = new List<string>();
// create the list of abbreviations for TimeZoneInfos
timeZoneInfos.ToList().ForEach(
x =>
{
if (!Regex.IsMatch(x.StandardName, "[A-Z0-9]{3,4,5}"))
{
string fullString = x.StandardName.Replace(" ", string.Empty);
string[] split = Regex.Split(fullString, "[a-z]|[()-.]");
abbreviations.Add(string.Concat(split));
}
});
return timeZoneInfos[abbreviations.IndexOf(timeZoneString)];
}
else
{
return timeZoneInfos.Where(x => x.StandardName == timeZoneString).First();
}
}
The purpose of this was to get to show my data on the Map with the correct time zone and this did it.
Warning: This will probably work on most of the North American time zones but I cannot guarantee that it will work all across the world. Windows does have 102 time-zones and I just tested a few. I basically created a map for abbreviations.