我正在以字符串的形式获取日期/时间值,并将其转换为DateTime
对象。
eg. 2012-11-10 11:37:06
我知道这个时间与我系统的本地时间不同。
如何为DateTime
对象分配时区,以便我可以准确地表示本地时区的时间并对夏令时变化敏感?
TimeZoneInfo.ConvertTimeToUtc可能会做你想做的事。
通过这种方式,您可以转换(在导入时)并将所有时间存储为UTC(假设您知道原始时间关联的时区夏令时偏移等),然后在任何时区显示它们。DateTime
我已经链接到同时接受一个对象和一个对象的重载方法TimeZoneInfo
。
还有其他方法TimeZoneInfo
也可用于此类转换。
ADateTime
不是时区,也不完全知道时区。它有一个Kind
,表示它是在系统时区 ( Local
)、UTC ( Universal
) 还是“其他”( Unspecified
) 中。
有DateTimeOffset
, 类似于 aDateTime
但也与 UTC 有偏移。不过,这与拥有时区不同——它不知道在任何其他时间点的当地时间。
我有偏见,但我建议使用具有各种类型的Noda Time来表示不同的概念:
ZonedDateTime
- 特定时区的本地日期/时间,与 UTC 有偏差,以防出现歧义OffsetDateTime
- 与 UTC 有偏移的本地日期/时间(但没有特定时区)LocalDateTime
- 只是一个本地日期/时间,没有特定的时区或偏移量LocalDate
- 没有时间成分或区域的日期LocalTime
- 只是一个日期时间,没有日期或区域所有这些还具有关联的日历系统(与 不同DateTime
)。在一瞬间,Instant
这只是 Unix 时代的一些滴答声。
如果你想坚持 BCL 类型,你可以在你自己的数据类型中保留DateTime
a 。TimeZoneInfo