public static void Main()
string clientLocalTimeZone = "Eastern Standard Time";
TimeSpan offset = new TimeSpan(0, -5, 0, 0);
TimeSpan dstOffset = new TimeSpan(0, -4, 0, 0);
DateTime startTime = new DateTime(2018, 3, 10);
TimeSpan currentTime = new TimeSpan(0, 7, 0, 0);
startTime = startTime.Add(currentTime);
DateTimeOffset startTimeWithTimeZone = CombineInitialTimeAndTimeZone(startTime, clientLocalTimeZone);
Console.WriteLine("Converted to {0}: {1}", clientLocalTimeZone, startTimeWithTimeZone);
Console.WriteLine("Converted to UTC: {0}", startTimeWithTimeZone.ToUniversalTime());
if (startTimeWithTimeZone.Offset == offset)
Console.WriteLine("Unit test correctly accounted for " + clientLocalTimeZone + " DST conditions");
throw new Exception("Unit test for " + clientLocalTimeZone + " DST conditions failed.");
startTime = new DateTime(2018, 3, 12);
currentTime = new TimeSpan(0, 7, 0, 0);
startTime = startTime.Add(currentTime);
startTimeWithTimeZone = CombineInitialTimeAndTimeZone(startTime, clientLocalTimeZone);
Console.WriteLine("Converted to {0}: {1}", clientLocalTimeZone, startTimeWithTimeZone);
Console.WriteLine("Converted to UTC: {0}", startTimeWithTimeZone.ToUniversalTime());
if (startTimeWithTimeZone.Offset == dstOffset)
Console.WriteLine("Unit test correctly accounted for " + clientLocalTimeZone + " DST conditions");
throw new Exception("Unit test for " + clientLocalTimeZone + " DST conditions failed.");
private static DateTimeOffset CombineInitialTimeAndTimeZone(DateTime initialTime, string timeZoneName)
TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
TimeSpan offset = info.GetUtcOffset(initialTime);
result = new DateTimeOffset(initialTime, offset);