如何在回发前获得时区

时间:2010-07-07 20:06:40

标签: javascript asp.net timezone

我正在制作一个页面,接受来自任何页面的帖子数据,这些页面无法更改,访问或以任何方式控制。

我需要以某种方式获得用户的时区。我知道,理想情况下,发布页面会执行此操作,但我无法访问这些页面。

我已经在这个网站上阅读了其他答案,并提出了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"]);

1 个答案:

答案 0 :(得分:0)

您可能会遇到异常,可能是因为生产服务器上存在信任问题/防火墙。

摆脱邪恶的catch区块,以便找出异常是什么。