public static void Main()
var tz = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
var now = new DateTime(2016, 5, 17, 17, 0, 0, DateTimeKind.Local);
var dtHere = new DateTimeWithZone(now, tz);
Console.WriteLine("AU: {0} ---> GMT: {1}", dtHere.LocalTime, dtHere.UniversalTime);
public struct DateTimeWithZone
private readonly DateTime utcDateTime;
private readonly TimeZoneInfo timeZone;
public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone)
utcDateTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified), timeZone);
this.timeZone = timeZone;
public DateTime UniversalTime { get { return utcDateTime; } }
public TimeZoneInfo TimeZone { get { return timeZone; } }
public DateTime LocalTime
return TimeZoneInfo.ConvertTime(utcDateTime, timeZone);