2008-11-19 2 views
1

Я, вероятно, что-то делаю неправильно, но не могу понять, почему. У меня есть поле DateTime в моей БД, поддерживающее время UTCПочему LocalTime отображает время сервера, а не время браузера?

Мой сервер находится в США, а браузер находится в Европе.

PageLoad код выглядит следующим образом:

DateTime t = DateTime.SpecifyKind((DateTime)rdr["startTime"], DateTimeKind.Utc); 
label1.Text = t.ToLocalTime().ToString(); 

Показанное время я получаю США LocalTime и не Европа. Что делать, чтобы отображать локальное время браузера?

Спасибо!

ответ

4

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

alert((new Date()).getTimezoneOffset(); 

Это может быть отправлен обратно на сервер и хранится в сессии или куки и используется чтобы компенсировать отображаемые им даты UTC. Альтернативно, другой способ состоит в том, чтобы иметь профили пользователей, где они могут указывать свой часовой пояс.

3

toLocalTime выполняется на вашем сервере, а не в браузере. Если вы хотите конвертировать даты на серверной стороне, вы должны получить часовой пояс, в котором находится пользователь (в Европе есть как минимум 3 часовых пояса, 6, если вы считаете летнее время ....)

Подход заключается в том, чтобы отправить время UTC клиенту, а затем использовать некоторый javascript для преобразования его в локальное время пользователя (объект Date в javascript знает, на что установлена ​​система пользователей)

1

Как some wrote, код в настоящее время выполненных на сервере, поэтому имеет смысл, что применяемый часовой пояс является локальным для сервера.

Как и его предложение по отправке UTC в браузер (что хорошо, когда доступно, но это не всегда вариант), вы должны изучить TimeZoneInfo, если используете .NET 3.5. Это позволит вам конвертировать между UTC и произвольными часовыми поясами, включая исторические изменения. (Есть намного больше времени, чем просто «GMT + 5» и т. Д.). Большая трудность заключается в том, чтобы определить, в какой временной зоне находится пользователь. Обычно вы можете получить текущее смещение от UTC с помощью JavaScript, но это не дает вам всю информацию, необходимую для правильного согласования. Рано или поздно вам, возможно, придется иметь настройку для каждого пользователя, для которой они находятся.

1

Я не думаю, что разумно хранить значения времени в вашей базе данных в зависимости от времени, которое оно находится в клиентской браузер.

Если у вас много клиентов во многих разных часовых поясах, и хранимая информация когда-либо сопоставляется или делится - порядок событий будет неправильным. 10:16 GMT - например, до 10:30 по восточно-восточному времени.

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

+0

Мой совет - всегда использовать UTC, особенно если ваше местное время имеет летнее/летнее время. С UTC каждый момент времени имеет уникальное значение, и легко подсчитать время между двумя датами. И когда вы хотите получить холодное время, просто используйте правильный запрос или конвертируйте его на клиенте. – some 2008-11-22 07:05:52

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