2013-05-07 2 views
2

Previously I was facing this issue and solved as described in the post.DayLight Сохранение времени DateTime из JavaScriptSerializer.Serialize to ToLocalTime

В настоящее время после реализации Daylight Saving я заметил вопрос, что если я выбирающий

DateTime startDate=new DateTime(2012,1,20); //Eastern Timezone (UTC -5:00) 

после сериализации было бы преобразовать его в:

string serializeDate= serializer.Serialize(startDate); //In ticks 20-Jan 2012 05:00AM 

на десериализации и ToLocalTime()

DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate); 
afterDeserialize.ToLocalTime(); 

Он работал отлично до:

datetime zone

Я отключил Automatically adjust clock for Daylight Saving Time.

Теперь его на сериализации добавить 4:00 hours (из-за перехода на летнее время), но на ToLocalTime() вычитанием -5:00 hours из-за окружающей среды летнее время, которое изменить дату моего объекта вычитает один день.

Как я могу впрыскивать текущую среду Переход на летнее время при обоих преобразованиях?

+0

Каково значение времени в 'startTime', когда вы отключаете это поле? (до сериализации). – mattytommo

+0

в обоих случаях его 20-янв-2012 00:00 –

ответ

1

Вам необходимо сохранить смещение для своего часового пояса, а затем повторно применить его после преобразования.

Чтобы сделать его динамическим (как вы сказали в комментариях), вы можете сначала получить текущий часовой пояс:

TimeZoneInfo tzi = TimeZoneInfo.Local; 
TimeSpan offset = tzi.GetUtcOffset(myDateTime); 

Затем сделайте:

DateTime startDate=new DateTime(2012,1,20).Add(offset); 

Затем после сериализации:

DateTime afterDeserialize= serializer.Deserialize<DateTime>(serializeDate); 
afterDeserialize.ToLocalTime().AddOffset(offset); 
+0

Ницца !!! но как я могу сделать FindSystemTimeZoneById() динамическим. означает, что он автоматически выбирает часовой пояс для системы. –

+0

@ZaheerAhmed Проверьте мое редактирование, я изменил его, чтобы использовать свойство CurrentTimeZone. – mattytommo

+1

Я обновил ваш код. «Стандартное имя» и «Ид» - это не одно и то же. ('Id' является инвариантным,' StandardName' предназначен для отображения и может быть локализован). И нет необходимости искать его - он всегда присутствует в 'TimeZoneInfo.Local'. –

Смежные вопросы