如何为DateTime分配时区?

时间:2012-11-13 22:06:57

标签: .net datetime timezone dst

我正在以字符串的形式获取日期/时间值,我将其投射到DateTime对象。

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

我知道这次是从我的系统的不同时区到当地时间。

如何为DateTime对象分配时区,以便我可以在当地时区准确表示时间并对夏令时变化敏感?

2 个答案:

答案 0 :(得分:0)

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

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

TimeZoneInfo中还有其他方法可用于此类转换。

答案 1 :(得分:0)

DateTime不是时区,并且不完全知道时区。它有一个Kind,表示它是在系统时区(Local),UTC(Universal)还是“其他东西”(Unspecified)。

DateTimeOffset,它类似于DateTime,但也与UTC有偏差。这与拥有时区不同 - 它不知道当地时间在任何其他时间点会是什么。

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

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

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

如果您想坚持BCL类型,可以在自己的数据类型中保留DateTime TimeZoneInfo