DateTimeOffset - ConvertTimeBySystemTimeZoneId

Converts a time to the time in another time zone based on the time zone's identifier.

Try it

public static void Main()
{
    // Define times to be converted.
    DateTime time1 = new DateTime(2018, 1, 1, 12, 1, 0);
    DateTime time2 = new DateTime(2018, 11, 6, 23, 30, 0);
    DateTimeOffset[] times = { new DateTimeOffset(time1, TimeZoneInfo.Local.GetUtcOffset(time1)),
                         	   new DateTimeOffset(time1, TimeSpan.Zero),
                               new DateTimeOffset(time2, TimeZoneInfo.Local.GetUtcOffset(time2)),
                               new DateTimeOffset(time2.AddHours(3), TimeZoneInfo.Local.GetUtcOffset(time2.AddHours(3))) };

    // Display the current time zone name.
    Console.WriteLine("Local time zone: {0}\n", TimeZoneInfo.Local.DisplayName);

    // Convert each time in the array.
    foreach (DateTimeOffset timeToConvert in times)
    {
		// C# Extension Method: DateTimeOffset - ConvertTimeBySystemTimeZoneId
        DateTimeOffset targetTime = timeToConvert.ConvertTimeBySystemTimeZoneId("Tokyo Standard Time");
        Console.WriteLine("Converted {0} to {1}.", timeToConvert, targetTime);
    }
}

View Source
using System;

public static partial class Extensions
{
    /// <summary>
    ///     Converts a time to the time in another time zone based on the time zone&#39;s identifier.
    /// </summary>
    /// <param name="dateTimeOffset">The date and time to convert.</param>
    /// <param name="destinationTimeZoneId">The identifier of the destination time zone.</param>
    /// <returns>The date and time in the destination time zone.</returns>
    public static DateTimeOffset ConvertTimeBySystemTimeZoneId(this DateTimeOffset dateTimeOffset, String destinationTimeZoneId)
    {
        return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTimeOffset, destinationTimeZoneId);
    }
}