Я делаю страницу, которая принимает данные сообщения с любого количества страниц, которые я не могу изменить, получить доступ или каким-либо образом контролировать.Как получить часовой пояс до обратной передачи
Мне нужно, так или иначе, получить часовой пояс пользователя. Я знаю, в идеале страница публикации будет делать это, но я не могу получить доступ к этим страницам.
Я прочитал другие ответы на этом сайте и придумал 2 почти, но не совсем там решения.
Во-первых, есть javascript. Я могу заставить функцию javascript вернуть (или изменить метку) правильное значение, но проблема в том, что мне нужна эта информация до обратной передачи. Я пытался написать имя часового пояса на другой странице и прочитать эту страницу, но я не знаю, как начать это делать? Любое другое обходное решение для использования javascript приветствуется или каким-либо образом принудительно вызывает это до того, как вызывается Page_Load?
function getTimeZone()
{
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
var label = document.getElementById("<%=TZ.ClientID%>");
label.textContent = "GMT " + gmtHours;
}
Второе решение, чтобы прочитать его с другой страницы, и я использую это:
http://ipinfodb.com/ip_query.php?ip=192.36.167.120&timezone=true
(Полностью случайный IP там, кстати)
Так вот моя функция получить информацию с этого сайта:
public string GetTimezone(string ip)
{
string address = string.Format("http://ipinfodb.com/ip_query.php?ip={0}&timezone=true", ip);
string timezone = "";
try
{
XmlTextReader reader = new XmlTextReader(address);
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(address);
wrq.Proxy.Credentials = CredentialCache.DefaultCredentials;
reader = new XmlTextReader(wrq.GetResponse().GetResponseStream());
string lastRead = "";
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
lastRead = reader.Name;
}
if (reader.NodeType == XmlNodeType.Text)
{
if (string.Compare(lastRead, "TimezoneName", true) == 0)
{
timezone = reader.Value;
break;
}
}
}
}
catch
{
timezone = "";
}
return timezone;
}
В принципе, это работает в режиме отладки, но когда он живет только пустая строка возвращается. Я озадачен? Есть ли лучший способ читать данные со страницы? Я использую Request.ServerVariables ["REMOTE_ADDR"], чтобы получить ip, и это кажется правильным, поскольку он вставляет правильный ip в базу данных, которую я использую.
Вот вызов:
GetTimezone(Request.ServerVariables["REMOTE_ADDR"]);
Избавиться от злого блока 'catch'. – SLaks