2014-02-18 8 views
7

Я заметил эту странную проблему относительно .ToUniversalTime(), но я не могу понять, почему..ToUniversalTime(), почему он работает таким образом?

Если я

DateTime currentServerTime = System.DateTime.Now; 
DateTime currentUTCServerTime = currentServerTime.ToUniversalTime(); 

log.Debug("Current server time :" + currentServerTime); 
log.Debug("Current Server UTC Time is :" + currentUTCServerTime); 

Результат

Current server time :2/18/2014 2:09:23 PM 
    Current Server UTC Time is :2/18/2014 7:09:23 PM 

5 часов.

Учитывая, что сервер расположен на восточном побережье США, с -5 смещением. Правильно.

Теперь, если я

String dateTimeString = "7/10/2013"; 
DateTime baseLined = Convert.ToDateTime(dateTimeString); 
DateTime convertedUTCTime = baseLined.ToUniversalTime(); 

log.Debug(dateTimeString + " is :"+baseLined); 
log.Debug(dateTimeString + " UTC time is :" + convertedUTCTime); 

Результат

7/10/2013 is : 7/10/2013 12:00:00 AM 
7/10/2013 UTC time is: 7/10/2013 4:00:00 AM 

4 часов.

Почему один результат показывает разницу в 5 часов, а другая показывает 4 ????

Пожалуйста, помогите.

=== ==== Редактировать

Благодаря Джону и Usr. Теперь я понимаю. ToUniversalTime() будет учитывать DST сервера и настраивать UTC в соответствии с объектом DateTime, к которому он привязан.

Так что я все еще пытаюсь обвести вокруг себя эту ситуацию.

В моей базе данных, 7/10/2013 - это срок и был записан как «7/10/2013 4:00:00 AM» (так как в это время это было во время летнего времени, смещение -4) ,

Теперь, в феврале 2014 года, DST не действует, теперь смещение -5. Но из-за этого, когда я настраиваю смещение часового пояса пользователя -5 до «7/10/2013 4:00:00 AM», он становится 7/09/2013 вместо 7/10/2013.

Как справиться с этой ситуацией?

+1

«Учитывая, что сервер расположен на восточном побережье США, с -5 смещением. Это правильно». - Как вы думаете, что смещение на 10 июля? –

+0

@ Джон, ничего себе, ладно. Это многое объясняет. Итак, что означает, что ToUniversalTime() также учитывает смещение на летнее время сервера? Я этого не знал! – Liming

+0

Да, он преобразует местное время в универсальное время. Это было бы бесполезно, если бы он не наблюдал DST, если честно. –

ответ

5

Из-за daylight savings. Местное время, как на ваших часах. UTC является непрерывным без пробелов, без двусмысленных точек во времени.

+1

Спасибо usr. У меня было неправильное понимание ToUniversalTime() по странным причинам, похоже, что требуется переход на летнее время, когда сервер также учитывается. В этом случае, как узнать, было ли время отрегулировано или не было отрегулировано с помощью летнего времени? – Liming

+0

@Liming это новый вопрос, на который я не могу ответить. – usr

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