.Net 中是否有 ZonedDateTime (Java)?

Is there a ZonedDateTime (Java) in .Net?

我发现的最佳等效项是 DateTimeOffset + TimeZoneInfo 的组合。这是最好的方法吗,创建一个包含这两者的结构 类 并确保它们保持一致?

不,.NET 基础 class 库中没有类似于 ZonedDateTime 的内置类型。

正如其他人指出的那样,如果您正在寻找类似于 Java 的 Joda Time 或 java.time 的时态模型,请考虑使用 Noda Time. It has a ZonedDateTime 结构。

如果您不想使用 Noda Time,并且您确实需要一个包含日期时间偏移量和时区的对象,那么您建议使用 DateTimeOffsetTimeZoneInfo 的结构方法领域是有道理的。这里有一些额外的提示:

  • 将其设计为 不可变 结构很重要,换句话说 - 仅从构造函数获取输入。仅在字段上公开 属性 吸气剂。不要直接公开字段,也不要在属性上提供设置器。

  • 请注意您要如何处理 DateTimeOffset 的偏移量 而不是 给定时区的正确偏移量的情况。你可能想调整它,或者你可能想抛出异常。

  • 您可能需要为您的结构提供自定义序列化,如果保存到数据库,您可能需要解构它。在任一情况下,只保留 TimeZoneInfo 组件的字符串 Id。不要尝试序列化或存储整个对象。

就是说 - 如果您需要这样的对象,您可能需要重新考虑。在许多情况下,只需分别使用 DateTimeOffsetTimeZoneInfo 就足够了。