using System.Collections.Generic;
private static TimeSpan GetUtcOffset(string ianaTz)
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.GetSystemTimeZones()
.FirstOrDefault(tz => tz.DisplayName.Contains(ianaTz.Split('/').Last()))?.Id);
return timeZone.BaseUtcOffset;
static void Main(string[] args)
var ianaTimeZones = TZConvert.KnownIanaTimeZoneNames;
List<string> errors = new List<string>();
foreach (var ianaTz in ianaTimeZones)
var windowsTimeZone = TZConvert.IanaToWindows(ianaTz);
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(windowsTimeZone);
var expectedOffset = timeZoneInfo.BaseUtcOffset;
var actualOffset = GetUtcOffset(ianaTz);
if (expectedOffset != actualOffset)
errors.Add($"Error: {ianaTz} - Expected: {expectedOffset}, Actual: {actualOffset}");
errors.Add($"Exception for {ianaTz}: {ex.Message}");
Console.WriteLine("All tests passed successfully.");
Console.WriteLine("Errors found:");
foreach (var error in errors)
Console.WriteLine(error);