DateTimeOffset - ConvertTime

Converts a time to the time in a particular time zone.

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))) };

    // Retrieve the time zone for Tokyo Standard Time (Japan).
    TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");

    // 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 - ConvertTime
        DateTimeOffset targetTime = timeToConvert.ConvertTime(tst);
        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 a particular time zone.
    /// </summary>
    /// <param name="dateTimeOffset">The date and time to convert.</param>
    /// <param name="destinationTimeZone">The time zone to convert  to.</param>
    /// <returns>The date and time in the destination time zone.</returns>
    public static DateTimeOffset ConvertTime(this DateTimeOffset dateTimeOffset, TimeZoneInfo destinationTimeZone)
    {
        return TimeZoneInfo.ConvertTime(dateTimeOffset, destinationTimeZone);
    }
}