2015-08-26 5 views
0

Я использую тип DateTimeOffset для хранения даты и времени. В некоторых случаях этот тип содержит местное время и смещение от UTC, в других случаях - время UTC.Как отличить Лондонское время от UTC, хранящегося в DatTimeOffset?

В прошлом я использовал DateTime.Kind, чтобы отличить эти случаи. Однако нет Kind собственности существует в DateTimeOffset типа.

Как отличить это лондонское время с нулевым смещением, сохраненным в DateTimeOffset, или это время UTC?

+0

В общем, вы не можете. Даже с 'DateTime',' .Kind' обычно не сохраняется, когда 'DateTime' сохраняется. Даже тогда у вас есть только' Utc', 'Local' или' Unspecified «Если вы уже не знаете, что ваша локальная зона - это Лондон, вы не можете сказать.« Unspecified »вроде бы так же легко мог быть UTC, Лондон, Исландия, Западная Африка или многие другие. –

ответ

1

DateTimeOffset сохраняет только данные UTC offset, а не данные часового пояса, которые также включают в себя свойства DST. Поэтому, если вы хотите сохранить «какой часовой пояс этот объект DateTimeOffset принадлежит« типу данных », вы захотите использовать System.TimeZoneInfo. .

Мое предложения создать класс (что-то вроде «DateTimeOffsetWithTimeZone», который имеет два члена, DateTimeOffset и TimeZoneInfo При настройке экземпляра этого для лондонского времени, вы можете назначить член TimeZoneInfo следующего:

myInstance.TZInfo = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 
+1

[Noda Time] (http: /nodatime.org) имеет тип 'ZonedDateTime' для этого точного поза. –