我正在製作一個頁面,用於接受來自任何數量的頁面的發佈數據,我無法更改,訪問或以任何方式進行控制。如何在回發之前獲取時區
我需要以某種方式獲取用戶的時區。我知道,理想情況下發布頁面會這樣做,但我無法訪問這些頁面。
我已閱讀本網站的其他答案,並拿出幾乎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"]);
擺脫邪惡的「抓」塊。 – SLaks 2010-07-07 20:14:57