How to get client date and time in ASP.NET?
当我使用
我喜欢使用浏览器/系统时间和时区或让他们选择时区的想法。在过去的项目中我使用了这样的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <script language="javascript"> function checkClientTimeZone() { // Set the client time zone var dt = new Date(); SetCookieCrumb("ClientDateTime", dt.toString()); var tz = -dt.getTimezoneOffset(); SetCookieCrumb("ClientTimeZone", tz.toString()); // Expire in one year dt.setYear(dt.getYear() + 1); SetCookieCrumb("expires", dt.toUTCString()); } // Attach to the document onload event checkClientTimeZone(); |
然后在服务器上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /// <summary> /// Returns the client (if available in cookie) or server timezone. /// </summary> public static int GetTimeZoneOffset(HttpRequest Request) { // Default to the server time zone TimeZone tz = TimeZone.CurrentTimeZone; TimeSpan ts = tz.GetUtcOffset(DateTime.Now); int result = (int) ts.TotalMinutes; // Then check for client time zone (minutes) in a cookie HttpCookie cookie = Request.Cookies["ClientTimeZone"]; if (cookie != null) { int clientTimeZone; if (Int32.TryParse(cookie.Value, out clientTimeZone)) result = clientTimeZone; } return result; } |
或者您可以将其作为URL参数传递并在Page_Load中处理:
1 | http://host/page.aspx?tz=-360 |
只记得使用分钟,因为并非所有时区都是整个小时。
我要做的是创建一个隐藏的输入字段,然后将Javascript例程连接到表单的onsubmit事件。此例程将使用客户端计算机上的时间填充隐藏字段。
隐藏字段可以通过使用HTML控件"HtmlInputHidden"类与ASP.NET一起使用。您只需为输入控件提供runat ="server"属性,就像任何其他服务器端控件一样。
然后,当表单回发时,服务器可以读出此时间。如果您需要在许多地方执行此操作,您甚至可以将其包装在服务器控件中。
或者,您可以使用AJAX执行此操作,但实现将取决于您使用的库。
如果您要维护用户个人资料,可以让他们告诉您他们的时区,然后进行必要的计算。
客户端和服务器可能不完全同步,因此问题是您是希望在客户端计算机上花时间,还是希望服务器上有时间,而是根据时区差异进行调整。 Javascript可以让您在客户端上获得时间(包括时区)。您还可以将服务器上的时间与客户端的时区相结合。
但是,您永远不能以比请求的纬度更高的精度获得时间。
另一种方法是根据用户的IP地址对用户进行地理定位。或者,如果浏览器具有此功能,则进行地理定位(即将推出Firefox)。获得用户的位置后,您可以查找时区。
JavaScript解决方案可能是一个好的和简单的解决方案。
我用ASP在ASP.Net中使用了这个方法
1 2 3 | Dim strLanguage As String = Request.UserLanguages(0) Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage) Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern |
这将产生查看数据的计算机的数据时间格式。