У меня есть база данных, которая содержит время как UTC. Это время можно показать на веб-странице, таким образом, меня попросили показать ее местным временем на странице, поскольку она может быть просмотрена из любой страны. Коллега упомянул что-то о получении настроек страны от текущего потока (на сервере), но я не мог найти детали об этом. То, что я хочу сделать возможный?
Если вы (и ваш веб-сайт) знакомы с javascript, есть очень простой способ сделать это.
Во-первых, на стороне сервера у вас должна быть дата / время UTC, отформатированные в формате RFC 3339 (стандарт времени в Интернете, используемый, среди других протоколов, icalendar). Базовый синтаксис RFC 3339:
YYYY-MM-DDTHH:MM:SS
Таким образом, где я нахожусь, время будет:
2010-05-04T05:52:33
Но когда время не локальное, а UTC, вы добавляете Z
в конец к обозначить это. Так что в моем случае, поскольку я нахожусь на -0500 часов от GMT, то же время, указанное выше, будет:
2010-05-04T10:52:33Z
Итак, сначала вы заставляете сервер выводить указанное выше в javascript вашей веб-страницы. Затем javascript может проанализировать эту метку времени и выведет дату и время, скорректированные с учетом часового пояса браузера (который определяется компьютером, на котором установлен браузер). Вы должны помнить, что если пользователь из Токио и просматривает ваш веб-сайт в Испании, он будет видеть метку времени в токийском времени, если только они не настроили часы своего компьютера.
Таким образом, javascript будет выглядеть так:
var time_string_utc = some_server_variable; // timestamp from server
var time_string_utc_epoch = Date.parse(time_string_utc);
var time_utc = new Date();
time_utc.setTime(time_string_utc_epoch);
На этом этапе у вас есть объект даты javascript, установленный на метку времени в формате UTC.Краткое объяснение того, что происходит выше:
Первая переменная предполагает, что вы передали строку с меткой времени этой переменной с сервера.
Вторая переменная использует метод Date.parse ()
для преобразования строки в метку времени эпохи.
Третья переменная создает неустановленный объект Date.
В последней строке используется метод setTime
, который устанавливает объект Date из метки времени эпохи.
Теперь, когда у вас есть объект, вы можете вывести его пользователю по своему усмотрению. В качестве простого эксперимента вы можете использовать:
document.write(time_utc);
который, если вы находитесь в моем часовом поясе, используя метку времени UTC, с которой я начал:
2010-05-04T10:52:33Z
даст:
Tue May 04 2010 05:52:33 GMT-0500 (CST)
, но вы можете использовать различные методы javascript для форматирования времени в что-то гораздо более приятное на вид.
Нет необходимости угадывать страну пользователя или даже настраивать метку времени, если вы доверяете локальному часовому поясу браузера / компьютера пользователя.
Опять же, краткая версия:
var time_string_utc = some_server_variable; // UTC time from server
var time_string_utc_epoch = Date.parse(some_server_variable);
var time_utc = new Date();
time_utc.setTime(time_string_utc_epoch);
document.write(time_utc);
Конечно, возможно. Вам просто нужно найти, что настройки страны
, чтобы определить страну, из которой прибыл ваш пользователь, а затем изменить отображаемую дату, чтобы она соответствовала времени этой страны. Вы также можете найти другой способ определить страну пользователя. (Возможно, из его IP-адрес).
Я уверен, что лучший способ справиться с этим - сообщить своему коллеге, что вам нужна дополнительная информация о реализации настроек страны в вашем проекте и о том, как вы можете их использовать.
РЕДАКТИРОВАТЬ:
Если подумать, я не думаю, что можно отображать местное время, если у вас есть культура клиента. Конечно, мне было бы интересно увидеть предложение ваших коллег.
Знакомство с культурой США, например, не поможет, поскольку в США много часовых поясов.
Я думаю, что использование Javascript, как предлагает Энтони, было бы правильным решением ...
СТАРЫЙ:
Вы можете переопределить метод InitializeCulture () кодом, который устанавливает текущий (выбранный или отчеты браузера) культуры:
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
Также рассмотрите возможность прочтения этой темы, которая более подробно описывает дозы и запреты при работе с проблемой перехода на летнее время в разных часовых поясах