Отобразите местное время со времени UTC, сохраненного в sql базе данных по приложению asp.net

Мне сохранили времена в sql базе данных в формате UTC. Я отображаю те времена на gridview, однако они - все еще формат UTC. Я хотел бы преобразовать их в местное время браузеров клиента. Проблема состоит в том что, хотя я мог сместить часовой пояс, который является только для текущей даты / временем. То смещение могло измениться, если некоторые из тех дат в будущем заканчивают тем, что произошли в течение летнего времени. Я относительно плохо знаком с веб-программированием, но походит на то, что я должен сделать, выполняется некоторый JavaScript, поскольку каждая запись связывает с gridview, который так или иначе берет объект C# datetimeoffset и преобразовывает его в местное время. Или возможно это не возможно?

5
задан JonF 15 February 2010 в 02:12
поделиться

2 ответа

Это можно сделать на стороне сервера, если у вас есть объект TimeZoneInfo . Вы можете использовать статический метод ConvertTimeFromUtc () .

В C #:

DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(myDbDateTime, myTimeZoneInfo);

Если у вас нет часового пояса на стороне сервера, все становится сложно, поскольку javascript не предоставляет часовой пояс клиента (кроме случаев, когда они находятся в США, и даже тогда только в некоторых браузерах). В этом случае может быть лучше заставить пользователя выбрать свой текущий часовой пояс и сохранить его в своей учетной записи. Если это отображается для анонимных пользователей, вам, вероятно, следует отображать по умолчанию в формате UTC и предоставить возможность обновить его для выбранного часового пояса.

Обновление

При попытке автоматически определить часовой пояс пользователя возникает несколько проблем.

  1. Часовой пояс не предоставляется серверу пользовательским агентом.
  2. Javascript не предоставляет доступ к часовому поясу (за исключением некоторых браузеров, иногда).

Функция javascript getTimezoneOffset () поначалу может показаться хорошей идеей, но поскольку существует несколько часовых поясов с одинаковым смещением, это значение не является уникальным. Разница между многими из этих неуникальных зон заключается в использовании летнего времени.

Пример: Индиана не учитывает летнее время. Следовательно, их смещение в течение полугода совпадает с восточным временем, а другая половина смещения совпадает с центральным временем.

Однако, если ваша пользовательская база находится в основном в США и использует IE, Chrome, Safari или Firefox, вы можете использовать метод toString () для Date для получения часового пояса. Эти браузеры по-разному добавляют часовой пояс к строке даты. За пределами США часовой пояс включен не во всех браузерах (хотя в некоторых он все еще отображается).

Откройте http://jsbin.com/onulo3 для наблюдения:
IE8: Вс, 14 фев, 22:12:22 EST 2010
Chrome: Вс, фев 14 2010 22:12:22 GMT-0500 (восточное стандартное время)
Safari: вс, 14 февраля 2010 22:12:22 GMT-0500 (восточное стандартное время)
Firefox: вс фев 14 2010 22:12:22 GMT-0500 (восточное стандартное время)

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

8
ответ дан 14 December 2019 в 08:49
поделиться

Есть два способа конвертировать.

Способ №1: Если у вас есть дата-время в формате «секунды с эпохи», просто используйте что-то вроде:

 var d=new Date(seconds_since_epoch);
 document.write(d.toString());

Способ №2: Если у вас есть только год, месяц, день, час, минута и секунда в Время UTC, используйте:

 var d=new Date(yyyy,mo-1,dd,hh,mi,ss); // in JavaScript, January is month 0
 document.write(d.toString());
-2
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: