【问题标题】:DateTimeOffset proper usageDateTimeOffset 正确使用
【发布时间】:2012-03-18 22:57:15
【问题描述】:

如果我有一个代表有效 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 结构,但我无法获得预期的输出。

提前致谢

【问题讨论】:

    标签: c# .net datetime timezone datetimeoffset


    【解决方案1】:

    看起来像你想要的:

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

    请注意,我将年份从 2011 年(不是闰年,二月没有 29 天)更改为 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 属性,它可能代表本地系统时区的即时时间。

    【讨论】:

    • 啊,太完美了。因此 DateTimeOffset(DateTime, TimeSpan) 构造函数需要一个非 UTC 日期。让我震惊的是 LocalDateTime - 使用 DateTime 属性更有意义! ...另外,2011 年是一个错字:P 谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2017-03-16
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多