读取客户端本地时间,但不读取用户计算机

时间:2014-01-22 17:41:23

标签: c# asp.net c#-4.0

我需要读取用户(客户端计算机)本地时间。但我不想从客户机器时间读取它。用户可以在他/她的PC中调整时间。

这就是我的想法。

  1. 读取客户端IP地址。
  2. 使用任何GEOIP API获取该IP的时区
  3. 使用C# TimeZoneInfo 类和 ConvertTImeFromUTC 方法获取该区域的当前本地时间
  4. 读取IP地址

    public static string GetUserIP(System.Web.HttpContext context)
    {
        string retIPAddress = string.Empty;
        string sIPAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(sIPAddress))
            retIPAddress = context.Request.ServerVariables["REMOTE_ADDR"];
        else
            retIPAddress = sIPAddress.Split(',').FirstOrDefault();
        return retIPAddress;
    }
    

    从IP地址API读取时区,例如IPInfoDB

    private static DateTime CurrentLocalTime()
    {
    
        return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("what ever the time zone name returned by API"));
    }
    

    这种方法听起来不太可靠,因为时区ID可能与API不匹配。 有没有更好的方法来实现这个?

    平台:ASP.NET

1 个答案:

答案 0 :(得分:0)

没有可靠的方法从客户机获取时间

  1. 客户端时间可能不可靠,因为客户可以更改时间
  2. 你的技术有些问题,如果有人在vpn后面,你将不会成为客户的时区