- Получите соответствующие
TimeZoneInfo
. - Создайте
DateTime
, который содержит местное время (т.е. полночь) - Вызов
TimeZoneInfo.GetUtcOffset
, чтобы найти смещение от UTC - Построить
DateTimeOffset
с местным временем и смещением
(Если Noda Time были производственнымиЯ уже предложил бы создать ZonedDateTime
с использованием этого, но, к сожалению, мы еще даже не близки к готовности к v1 ... хотя на самом деле нужные вам биты, вероятно, достаточно стабильны:)
Стоит отметить, что «полночь текущего дня» не всегда существует во всех часовых поясах.Если вам, возможно, придется иметь дело с часовыми поясами, которые имеют переход на летнее время в полночь, вы можете посмотреть TimeZoneInfo.IsAmbiguousTime
и TimeZoneInfo.IsInvalidTime
.