【问题标题】:How do I distinguish London time from UTC stored in DatTimeOffset?如何区分伦敦时间和存储在 DateTimeOffset 中的 UTC?
【发布时间】:2015-08-26 23:26:14
【问题描述】:

我使用DateTimeOffset 类型来存储日期和时间。在某些情况下,此类型包含本地时间和与 UTC 的偏移量,在其他情况下 - UTC 时间。

过去我使用DateTime.Kind 来区分这些情况。但是DateTimeOffset 类型中不存在Kind 属性。

我如何区分这是一个零偏移量存储在DateTimeOffset 中的伦敦时间还是这是一个 UTC 时间?

【问题讨论】:

  • 一般来说,你不能。即使使用DateTime,当DateTime 被持久化时,.Kind 通常也不会被保留。即使那样,您也只有UtcLocalUnspecified。除非您已经知道您的本地区域是伦敦,否则您无法分辨。 Unspecified 类型可以很容易地是 UTC、伦敦、冰岛、西非或许多其他地方。

标签: .net datetime utc datetimeoffset


【解决方案1】:

DateTimeOffset 仅存储 UTC 偏移数据,而不是包含 DST 属性的时区数据。因此,如果您想存储“此 DateTimeOffset 对象属于哪个时区”类型的数据,您将需要使用 System.TimeZoneInfo。

我的建议是创建一个类(类似于“DateTimeOffsetWithTimeZone”,它有两个成员,一个 DateTimeOffset 和一个 TimeZoneInfo。当为伦敦时间设置一个实例时,您可以为 TimeZoneInfo 成员分配以下内容:

myInstance.TZInfo = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");

【讨论】:

  • Noda Time 有一个 ZonedDateTime 类型用于此确切目的。
猜你喜欢
  • 2014-09-26
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 2013-05-29
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
相关资源
最近更新 更多