提问人:Arief 提问时间:11/8/2008 最后编辑:Stephen KennedyArief 更新时间:2/21/2018 访问量:64275
如何在 ASP.NET 获取客户日期和时间?
How to get client date and time in ASP.NET?
答:
5赞
Stephen Wrighton
11/8/2008
#1
如果您要维护用户配置文件,则可以要求他们告诉您他们的时区,然后进行必要的计算。
0赞
Keltex
11/8/2008
#2
另一种方法是根据用户的 IP 地址对他/她进行地理定位。或者,如果浏览器具有此功能,则进行地理定位(Firefox即将推出)。获得用户的位置后,您可以查找时区。
javascript 解决方案可能是一个很好的简单解决方案。
评论
3赞
Stephen Wrighton
11/9/2008
知识产权不一定能给出正确的答案。我有一个客户端,他使用单个站点进行所有网络连接(从一个站点到另一个站点的直接管道),因此所有这些站点都来自 CST IP,无论它们实际位于何处。
0赞
abatishchev
2/26/2011
Stephen:我们的业务是隐藏客户端IP,所以VPN输入在布拉格,代理输出在柏林。例如,客户在莫斯科。
0赞
JacquesB
11/8/2008
#3
客户端和服务器可能不完全同步,因此问题是你是想要客户端计算机上的时间,还是想要服务器上的时间,但要针对时区差异进行调整。Javascript 可以让你在客户端上获得时间(包括时区)。您还可以将服务器上的时间与客户端的时区组合在一起。
但是,您永远无法获得比请求延迟更高的精度的时间。
12赞
Simon Johnson
11/9/2008
#4
我要做的是创建一个隐藏的输入字段,然后将 Javascript 例程连接到表单的 onsubmit 事件。此例程将使用客户端计算机上的时间填充隐藏字段。
隐藏字段可以通过使用 HTML 控件“HtmlInputHidden”类与 ASP.NET 一起使用。您只需为输入控件提供 runat=“server” 属性,就像任何其他服务器端控件一样。
然后,当表单回发时,服务器可以读出这个时间。如果您需要在许多地方执行此操作,您甚至可以将其包装在服务器控件中。
或者,您可以使用 AJAX 执行此操作,但实现将取决于您使用的库。
评论
2赞
Doug S
5/15/2014
无需执行所有这些操作,只需使用 Javascript 设置 cookie,存储浏览器时区即可。然后,后端可以随时读取该cookie。
0赞
Stephen Kennedy
2/21/2018
饼干的问题在于人们会旅行。
0赞
East of Nowhere
6/22/2019
这对于表单提交/回传有好处,但是如果您在初始页面加载时需要客户时间怎么办?
17赞
Ryan
11/9/2008
#5
我喜欢使用浏览器/系统时间和时区或让他们选择时区的想法。在过去的一个项目中,我使用了这样的东西:
<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();
</script>
然后在服务器上:
/// <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中处理它:
http://host/page.aspx?tz=-360
请记住使用分钟,因为并非所有时区都是整小时。
评论
0赞
Thomas
8/19/2014
此行不清楚 Int32.TryParse(cookie.值,输出结果);将 cookie 值存储在结果变量中,但在将总分钟数存储到结果变量之前。不是很清楚您的服务器端例程 GetTimeZoneOffset() 函数。如果可能,请解释。
0赞
Ryan
8/20/2014
@Thomas我从服务器时区开始,然后检查客户端时区 cookie 是否存在。如果 cookie 存在,请尝试将字符串转换为整数分钟。
-5赞
Yoshida Hiro
6/28/2012
#6
我在 VB 的 ASP.Net 中使用了这种方法
Dim strLanguage As String = Request.UserLanguages(0)
Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage)
Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern
这将生成计算机查看数据的数据时间格式。
评论
6赞
Bob Kaufman
6/28/2012
欢迎来到 StackOverflow!请重新阅读问题。用户想知道客户端的本地时间,而不是时间格式。
评论