如何将时区分配给日期时间?



我正在以字符串的形式获取一个日期/时间值,我正在将其转换为DateTime对象。

eg. 2012-11-10 11:37:06

我知道这个时间与我的系统本地时间来自不同的时区。

如何为DateTime对象分配时区,以便能够以本地时区准确表示时间,并对夏令时变化敏感?

DateTime不是时区,也不完全知道时区。它有一个Kind,指示它是在系统时区(Local),UTC(Universal)还是"其他东西"(Unspecified)。

DateTimeOffset,它就像一个DateTime,但也与UTC有偏移量。不过,这与拥有时区不同 - 它不知道任何其他时间点的本地时间。

我有偏见,但我建议使用我的Noda Time,它有各种各样的类型来表示不同的概念:

  • ZonedDateTime- 特定时区的本地日期/时间,与 UTC 的偏移量仅以防歧义
  • OffsetDateTime- 与 UTC 有偏移量的本地日期/时间(但没有特定时区)
  • LocalDateTime- 只是本地日期/时间,没有特定的时区或偏移量
  • LocalDate- 没有时间部分或区域的日期
  • LocalTime- 只是一个日期的时间,没有日期或区域

所有这些都有一个关联的日历系统(与DateTime不同)。在一瞬间,有Instant只是Unix时代的一些刻度。

如果要坚持使用 BCL 类型,可以在自己的数据类型中保留带有TimeZoneInfoDateTime

TimeZoneInfo.ConvertTimeToUtc 可能会做你想做的事。

通过这种方式,您可以转换(导入时)并将所有时间存储为 UTC(假设您知道原始时间与哪个时区夏令时偏移量等相关联),并在之后的任何时区显示它们。 我已经链接到重载方法,该方法同时接受DateTimeTimeZoneInfo对象。

TimeZoneInfo还有其他方法对此类转换也很有用。

相关内容

  • 没有找到相关文章

最新更新