2014-10-08 2 views
0

Все, что я читаю, говорит о том, что IIS использует местное время и часовой пояс, и, как таковое, чтобы изменить действующий часовой пояс и/или время, мне нужно только изменить время и часовой пояс для сервер, и он изменит время действия и время, которое видит сервер IIS, и у меня есть сервер, на котором работает простая служба WCF, которая, похоже, не работает для меня.IIS Неправильное представление времени и времени

Этот сервер расположен на территории Тихоокеанского побережья в арендованной ферме, но на нем был настроен восточный часовой пояс, так как мы его впервые установили. Я попытался сбросить все и даже попытался подпрыгнуть в поле, поэтому я уверен, что он не кэшируется. Значения времени или что-то такое простое. Однако после того, как я обнаружил код WCF, чтобы попытаться понять, почему он передает даты, которые отключены на три часа для всех сервисов потребления, я обнаружил, что IIS убежден, что он находится в Pacific Timezone, несмотря на то, что все настроено иначе.

System.TimeZoneInfo.Local сообщает, что он находится в Pacific Time и DateTime.Now дает мне временную метку, которая отключена на три часа, и я не могу понять, как убедить IIS, что ей нужно использовать восточное Время как эффективный часовой пояс для записей, которые он создает и передает.

ответ

1

В целом, код сервера должен быть не зависит от локального часового пояса. Вызов либо TimeZoneInfo.Local, либо DateTime.Now из серверного приложения обычно является ошибкой. См. The Case Against DateTime.Now.

Лучшей практикой было бы оставить ваш сервер установленным для координированного универсального времени (UTC) и написать приложение для управления часовыми поясами внутри страны. Если вы зависимы от восточного времени, то ваш код должен сделать что-то вроде:

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime now = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz); 

Это сказало, если TimeZoneInfo.Local.Id возвращается Pacific Standard Time, то есть только два возможных объяснения:

  • Ваш система действительно установлена ​​для тихоокеанского часового пояса.

  • Ваша система была установлена ​​ для тихоокеанского часового пояса, но вы изменили ее без перезапуска или вызова TimeZoneInfo.ClearCachedData.

Поскольку вы устранили оба эти объяснения в том, как вы описали проблему, я могу только сказать, что там должно быть что-то не так с тем, как вы устанавливаете часовой пояс.

Попробуйте использовать tzutil.exe в командной строке администратора. tzutil /g предоставит вам текущую настройку часового пояса. tzutil /s "Eastern Standard Time" установит часовой пояс для Восточного времени США. Обязательно перезапустите приложение после изменения часового пояса, либо путем утилизации пула приложений в консоли управления, используя iisreset, перезагружая IIS, либо (если необходимо) перезагрузить сервер.

Вы также можете просто внести изменения через панель управления часовым поясом.

Если вы говорите, что вы сделали все это, и вы получаете "Eastern Standard Time" назад от tzutil /g, но TimeZoneInfo.Local.Id возвращается "Pacific Standard Time" даже если вы загрузитесь, то я называю BS. Это просто невозможно.Возможно, есть более простое объяснение, например, возможно, вы развертываете на несколько серверов, и вы настраиваете часовой пояс на другом сервере, чем вы получаете результаты.

+0

Боюсь, что моя проблема немного глубже, чем использование DateTime.Now, я использовал эти два вызова из непосредственного окна в Visual Studio, чтобы подтвердить проблему. Я унаследовал старую службу WSE, которая обменивается данными в объекте DataSet, чтобы обеспечить возможность подключения данных для приложения ASPX на другом сервере. Я конвертировал его в WCF, но не смог решить проблему плохой процедуры разговора в наборах данных для того, чтобы задействовать весь объем кода. –

+0

Все наши DB DateTimes уже записаны в UTC, а служба ASPX обрабатывает преобразование в клиентское время, но WCF принимает дату в локальное время и корректирует их на три часа на принимающей стороне, потому что она воспринимает часовой пояс дифференциал. Основываясь на большом количестве задействованного кода, –

+0

Я не готов обращаться к каждому набору записей, чтобы преобразовать все даты в локальное время, чтобы получающая служба могла конвертировать их обратно в UTC, чтобы ASPX мог правильно конвертировать в клиентское время. WCF, предполагающий местное время, не является проблемой, потому что оба APSX и WCF должны находиться в одном и том же часовом поясе, но с WCF, предполагающим неправильный часовой пояс, наши даты UTC становятся искаженными при переходе. Кроме того, TZUtil также сообщает «Восточное стандартное время», я сегодня откажусь от всего сервера, а не только от веб-сервера IIS, и посмотрю, каков результат, и отчитайтесь завтра. –

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