DateTimeOffset proper usage

Barg picture Barg · Feb 29, 2012 · Viewed 17.5k times · Source

If I have a DateTime instance which represents a valid UTC time, and an offset that converts that DateTime to the time zone where it applies, how do I construct a DateTimeOffset instance to represent this?

var utcDateTime = new DateTime(2011, 02, 29, 12, 43, 0, /*DateTimeKind.Utc*/);
var localOffset = TimeSpan.FromHours(2.0);

var dto = ...

// Here the properties should be as follows;
// dto.UtcDateTime = 2011-02-29 12:43:00
// dto.LocalDateTime = 2011-02-29 14:43:00

Perhaps I'm not understanding the DateTimeOffset structure correctly, but I'm unable to get the expected output.

Thanks in advance

Answer

Ani picture Ani · Feb 29, 2012

Looks like you want:

var utcDateTime = new DateTime(2012, 02, 29, 12, 43, 0, DateTimeKind.Utc);
var dto = new DateTimeOffset(utcDateTime).ToOffset(TimeSpan.FromHours(2));

Note that I changed the year from 2011 (which is not a leap year and does not have 29 days in February) to 2012.

Test:

Console.WriteLine("Utc = {0}, Original = {1}", dto.UtcDateTime, dto.DateTime);

Output:

Utc = 2/29/2012 12:43:00 PM, Original = 2/29/2012 2:43:00 PM

Do note that you probably don't want the LocalDateTime property, which may represent the instant in time as of the local system's timezone.