.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,并且您确实需要一个包含日期时间偏移量和时区的对象,那么您建议使用 DateTimeOffset
和 TimeZoneInfo
的结构方法领域是有道理的。这里有一些额外的提示:
将其设计为 不可变 结构很重要,换句话说 - 仅从构造函数获取输入。仅在字段上公开 属性 吸气剂。不要直接公开字段,也不要在属性上提供设置器。
请注意您要如何处理 DateTimeOffset
的偏移量 而不是 给定时区的正确偏移量的情况。你可能想调整它,或者你可能想抛出异常。
您可能需要为您的结构提供自定义序列化,如果保存到数据库,您可能需要解构它。在任一情况下,只保留 TimeZoneInfo
组件的字符串 Id
。不要尝试序列化或存储整个对象。
就是说 - 如果您需要这样的对象,您可能需要重新考虑。在许多情况下,只需分别使用 DateTimeOffset
和 TimeZoneInfo
就足够了。
我发现的最佳等效项是 DateTimeOffset + TimeZoneInfo 的组合。这是最好的方法吗,创建一个包含这两者的结构 类 并确保它们保持一致?
不,.NET 基础 class 库中没有类似于 ZonedDateTime
的内置类型。
正如其他人指出的那样,如果您正在寻找类似于 Java 的 Joda Time 或 java.time
的时态模型,请考虑使用 Noda Time. It has a ZonedDateTime
结构。
如果您不想使用 Noda Time,并且您确实需要一个包含日期时间偏移量和时区的对象,那么您建议使用 DateTimeOffset
和 TimeZoneInfo
的结构方法领域是有道理的。这里有一些额外的提示:
将其设计为 不可变 结构很重要,换句话说 - 仅从构造函数获取输入。仅在字段上公开 属性 吸气剂。不要直接公开字段,也不要在属性上提供设置器。
请注意您要如何处理
DateTimeOffset
的偏移量 而不是 给定时区的正确偏移量的情况。你可能想调整它,或者你可能想抛出异常。您可能需要为您的结构提供自定义序列化,如果保存到数据库,您可能需要解构它。在任一情况下,只保留
TimeZoneInfo
组件的字符串Id
。不要尝试序列化或存储整个对象。
就是说 - 如果您需要这样的对象,您可能需要重新考虑。在许多情况下,只需分别使用 DateTimeOffset
和 TimeZoneInfo
就足够了。