我正在以字符串的形式获取日期/时间值,我将其投射到DateTime
对象。
eg. 2012-11-10 11:37:06
我知道这次是从我的系统的不同时区到当地时间。
如何为DateTime
对象分配时区,以便我可以在当地时区准确表示时间并对夏令时变化敏感?
答案 0 :(得分:0)
TimeZoneInfo.ConvertTimeToUtc 可能会做你想做的事。
通过这种方式,您可以转换(导入时)并将所有时间存储为UTC(假设您知道什么时区夏令时偏移等,原始时间关联)并在此之后的任何时区显示它们。我已经链接到了一个带有DateTime
和TimeZoneInfo
对象的重载方法。
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
。