2012-02-29 91 views
1

如果我有一个DateTime实例代表一个有效的UTC时间以及一个将该DateTime转换为它应用的时区的偏移量,那么我该如何构造一个DateTimeOffset实例来表示它呢?DateTimeOffset正确的使用

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 

也许我不正确理解DateTimeOffset结构,但我无法获得预期的输出。

在此先感谢

回答

8

看起来像你想:

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

注意,我从2011年改变了一年(这是不是闰年,不会有2900天月)至2012年。

测试:

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

输出:

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

请注意,你可能希望LocalDateTime属性,它可能代表的时间点作为本地系统的时区。

+0

啊,那很完美。所以DateTimeOffset(DateTime,TimeSpan)构造函数需要一个非UTC日期。这是扔我的LocalDateTime - 使用DateTime属性更有意义! ...另外,2011年是一个错字:P谢谢:) – Barg 2012-02-29 13:19:06