Могу ли я получить часовой пояс браузера в ASP.NET или мне нужно полагаться на операции JS для извлечения информации?

Могу ли я получить часовой пояс браузера в ASP.NET или мне нужно полагаться на операции JS для извлечения информации

Нет заголовка «Accept-Timezone» (или тому подобного) – стандарт HTTP не содержит каких-либо средств, позволяющих браузеру автоматически сообщать серверу о том, в какой часовом поясе пользователь обращает внимание.

Основной подход – использовать дату и прочитать информацию TZ от нее.

Поскольку нет стандартных (функции именования часовых поясов в кросс-браузере), вам нужно прибегнуть к чему-то вроде (yikes!):

function getTimezoneName() { tmSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0)); so = -1 * tmSummer.getTimezoneOffset(); tmWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0)); wo = -1 * tmWinter.getTimezoneOffset(); if (-660 == so && -660 == wo) return 'Pacific/Midway'; if (-600 == so && -600 == wo) return 'Pacific/Tahiti'; if (-570 == so && -570 == wo) return 'Pacific/Marquesas'; if (-540 == so && -600 == wo) return 'America/Adak'; if (-540 == so && -540 == wo) return 'Pacific/Gambier'; if (-480 == so && -540 == wo) return 'US/Alaska'; if (-480 == so && -480 == wo) return 'Pacific/Pitcairn'; if (-420 == so && -480 == wo) return 'US/Pacific'; if (-420 == so && -420 == wo) return 'US/Arizona'; if (-360 == so && -420 == wo) return 'US/Mountain'; if (-360 == so && -360 == wo) return 'America/Guatemala'; if (-360 == so && -300 == wo) return 'Pacific/Easter'; if (-300 == so && -360 == wo) return 'US/Central'; if (-300 == so && -300 == wo) return 'America/Bogota'; if (-240 == so && -300 == wo) return 'US/Eastern'; if (-240 == so && -240 == wo) return 'America/Caracas'; if (-240 == so && -180 == wo) return 'America/Santiago'; if (-180 == so && -240 == wo) return 'Canada/Atlantic'; if (-180 == so && -180 == wo) return 'America/Montevideo'; if (-180 == so && -120 == wo) return 'America/Sao_Paulo'; if (-150 == so && -210 == wo) return 'America/St_Johns'; if (-120 == so && -180 == wo) return 'America/Godthab'; if (-120 == so && -120 == wo) return 'America/Noronha'; if (-60 == so && -60 == wo) return 'Atlantic/Cape_Verde'; if (0 == so && -60 == wo) return 'Atlantic/Azores'; if (0 == so && 0 == wo) return 'Africa/Casablanca'; if (60 == so && 0 == wo) return 'Europe/London'; if (60 == so && 60 == wo) return 'Africa/Algiers'; if (60 == so && 120 == wo) return 'Africa/Windhoek'; if (120 == so && 60 == wo) return 'Europe/Amsterdam'; if (120 == so && 120 == wo) return 'Africa/Harare'; if (180 == so && 120 == wo) return 'Europe/Athens'; if (180 == so && 180 == wo) return 'Africa/Nairobi'; if (240 == so && 180 == wo) return 'Europe/Moscow'; if (240 == so && 240 == wo) return 'Asia/Dubai'; if (270 == so && 210 == wo) return 'Asia/Tehran'; if (270 == so && 270 == wo) return 'Asia/Kabul'; if (300 == so && 240 == wo) return 'Asia/Baku'; if (300 == so && 300 == wo) return 'Asia/Karachi'; if (330 == so && 330 == wo) return 'Asia/Calcutta'; if (345 == so && 345 == wo) return 'Asia/Katmandu'; if (360 == so && 300 == wo) return 'Asia/Yekaterinburg'; if (360 == so && 360 == wo) return 'Asia/Colombo'; if (390 == so && 390 == wo) return 'Asia/Rangoon'; if (420 == so && 360 == wo) return 'Asia/Almaty'; if (420 == so && 420 == wo) return 'Asia/Bangkok'; if (480 == so && 420 == wo) return 'Asia/Krasnoyarsk'; if (480 == so && 480 == wo) return 'Australia/Perth'; if (540 == so && 480 == wo) return 'Asia/Irkutsk'; if (540 == so && 540 == wo) return 'Asia/Tokyo'; if (570 == so && 570 == wo) return 'Australia/Darwin'; if (570 == so && 630 == wo) return 'Australia/Adelaide'; if (600 == so && 540 == wo) return 'Asia/Yakutsk'; if (600 == so && 600 == wo) return 'Australia/Brisbane'; if (600 == so && 660 == wo) return 'Australia/Sydney'; if (630 == so && 660 == wo) return 'Australia/Lord_Howe'; if (660 == so && 600 == wo) return 'Asia/Vladivostok'; if (660 == so && 660 == wo) return 'Pacific/Guadalcanal'; if (690 == so && 690 == wo) return 'Pacific/Norfolk'; if (720 == so && 660 == wo) return 'Asia/Magadan'; if (720 == so && 720 == wo) return 'Pacific/Fiji'; if (720 == so && 780 == wo) return 'Pacific/Auckland'; if (765 == so && 825 == wo) return 'Pacific/Chatham'; if (780 == so && 780 == wo) return 'Pacific/Enderbury' if (840 == so && 840 == wo) return 'Pacific/Kiritimati'; return 'US/Pacific'; } 

Вам нужно полагаться на javascript. Вот библиотека для этого – detect_timezone.js

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

Вы можете с помощью JavaScript получить смещение текущего часового пояса с UTC, используя Date#getTimezoneOffset . Однако это не однозначно идентифицирует часовой пояс, поскольку существует множество зон, которые могут использовать одно и то же UTC-смещение, а также множество регионов, которые переключают тайм-точки на DST.

Иногда вы можете получить строку, представляющую короткое имя часового пояса, вызывая Date#toLocaleString . Нет никакой гарантии, что будет имя используемого часового пояса, а имена часовых поясов не являются глобально уникальными, а иногда и браузером (особенно о DST). Но часто есть что- то , и если вы можете связать эту аббревиатуру со смещением, которое вы уже прочитали, и сравнить это с кратким списком известных правил часового пояса, это дает вам хорошее предположение. Вы также можете указать географический IP-таргетинг и использование на стороне сервера заголовка Accept-Language чтобы помочь лучше понять.

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

Вы не можете получить часовой пояс без выполнения каких-либо действий на клиенте (например, JavaScript), поскольку ASP.NET является серверной.

  • Как преобразовать время в часовой пояс устройства iPhone?
  • Как установить часовой пояс MySQL?
  • .NET DateTime.Now возвращает неправильное время, когда изменяется часовой пояс
  • Преобразование временной зоны
  • Как хранить дату и время и временные метки в часовом поясе UTC с JPA и Hibernate
  • Как получить текущий часовой пояс MySQL?
  • Названия часовых поясов с одинаковыми свойствами дают разные результаты при применении к метке времени
  • Управление календарем, датой и временем java для приложения с несколькими часовыми поясами
  • Как мне заполнить список часовых поясов IANA / Olson от Noda Time?
  • Преобразование дат UTC в другие часовые пояса
  • ORA-01882: область часового пояса не найдена
  • Interesting Posts

    Могут ли macros быть перегружены по количеству аргументов?

    Доступ к окну Windows из Linux

    Начальный экран Windows 8 – Перемещение групп

    Изменение поведения перетаскивания в браузере Windows 7 для использования сенсорного экрана

    Как передать атрибут сеанса как аргумент метода (параметр) с помощью Spring MVC

    Какой профиль использует Selenium WebDriver по умолчанию?

    График временных рядов смещается на 2 часа, если используется scale_x_datetime

    Можно ли ввести код javascript, который ОПИСАЕТ тот, который существует в DOM? (например, функция предупреждения по умолчанию)

    android: определение типа безопасности беспроводных сетей в диапазоне (без подключения к ним)

    Удалить панель действий по умолчанию для Android по умолчанию

    Команда / сценарий для копирования файлов с определенным ext, который может иметь одно и то же имя, из структуры папок в singe directory и переименовывать

    Windows XP теряет букву диска для существующего раздела на диске

    Скопировать файлы с частичной поддержкой резюме? (Win / Cygwin)

    Невозможно изменить цвет GameObject с помощью скрипта?

    Преобразования Java – char, int

    Давайте будем гением компьютера.