DateTimeOffset的正确使用方法

6
如果我有一个代表有效UTC时间的DateTime实例,以及将该DateTime转换为应用其时间区域的偏移量,我该如何构建一个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结构,但我无法获得预期的输出。
提前致谢。
1个回答

15

看起来你想要:

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

请注意,我将年份从2011年更改为2012年(2012年是闰年并且2月有29天)。

测试:

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 属性,因为它可能代表了本地系统时区的时间瞬间。


啊,太完美了。因此,DateTimeOffset(DateTime, TimeSpan) 构造函数需要非 UTC 日期。是 LocalDateTime 抛出了我 - 使用 DateTime 属性更有意义!... 另外,2011 年是一个打字错误 :P 谢谢 :) - Barg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接