在c#中检索准确的客户端时间
Retrieving exact clients time in C#
为了节省用户的时间和数据,我一直在使用DateTime.Now;
函数。在后期阶段,我使用JavaScript获取客户端的日期和时间来维护time Zone。但是当我更改系统的日期和时间并尝试使用JavaScript时。它显示了我的电脑的时间变化。我需要如何让客户正确的当前日期和时间值。如何得到它。
请不要超过c# &javascript .
当使用不同时区的客户端/服务器时,您应该使用UTC
例如在c#中使用DateTime。UTCNow而不是DateTime.UTC。每次保存时,您都应该保存时区,稍后您将能够计算本地时间。
你似乎在问"我如何确定客户的真实时区,即使他们的计算机时钟设置不正确?"如果是,请更新你的问题,说得更清楚。
你不能从JavaScript中做到这一点:它怎么能知道任何时间或时区,而不是计算机告诉它的(这两者都是基于用户设置的)?
在服务器端,您可以尝试ip地址到时区的映射,但实际上这仍然只是一个有根据的猜测。(如果你想继续学习,可以谷歌一下。)你可以黑进他们的网络摄像头,并希望它指向墙上的时钟。
在客户端,当客户端用javascript发送请求时,获取新的Date(). tojson()值并将其发送到服务器。toJSON()返回当前客户端日期时间在GMT+0000时区(格林威治):
var dtStr=new Date().toJSON();
在服务器端,在c#中:
DateTime dtServer=DateTime.Now;
DateTime dtClient=DateTime.Parse(Request.QueryString["dtStr"]); // Or Request.Form
double requestTimeDelta=10f; // max time in seconds between client starts the request,
// and this code lines is executed.
double secondsDelta=2f;
DateTime max=dtClient.AddSeconds(requestTimeDelta+secondsDelta);
DateTime min=dtClient.AddSeconds(-secondsDelta);
if (max>=dtServer && min<=dtServer) {
// time is correct
}
else
{
// time is incorrect
}
上面的代码是必需的,客户端和服务器上的时间已经与全局时钟(例如internet时间源服务器)同步。为了避免这个问题,你可以计算和保存(在会话中,例如)初始(在第一次请求时)客户端和服务器时钟之间的差异,并将这个"差异"添加到max
和min
变量中。这个行为是简单的编码,并没有显示在上面的代码。
DateTime.Now
在服务器上运行并获得服务器上配置的日期时间,而不是在客户端上。
你将不得不使用javascript来获取客户端的时间,你可以通过一个隐藏字段传递值,该字段可以使用javascript的new Date()
方法存储。要从GMT获取偏移量,请使用Date.getTimezoneOffset()
,它将以分钟为单位给出偏移量,例如对于+ 1 GMT,它将返回-60。
最好以GMT格式维护所有日期时间信息,然后根据客户端需要使用偏移量。
您无法获得实际的机器时间。您可以尝试计算客户端的时区,然后进行相应的调整。
快速搜索一下这篇文章,它实现了一个解决方案,解决了使用JavaScript Date
对象的一些问题。
始终在服务器端以一种格式维护日期时间。我更喜欢DateTimeOffset,它可以为我以正确的格式存储它。你一定要仔细阅读:http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx
关于在客户端渲染它,你有两个选择:
A)将客户端的时区存储在cookie中,当他登录时,然后使用该时区为我们的客户端提供所有的日期时间。
B)或者你需要在客户端执行你的时间巫术以获得最佳结果,这可以使用javascript实现。你需要确保你传递一个值(比如UTC)回你的客户端,你也需要解析你的时间到UTC .
这里有一个简洁的函数,在将时间发送到服务器之前将其解析为UTC
function getDateAsUTC(time, date) {
var regExTime = /^('d{1,2}):('d{2})([AP]M)?$/i;
var invalidTimeString="invalid time";
if (segmentsTime = time.replace(" ", "").match(regExTime)) {
if (segmentsTime[3]) {
// 12-hour time format with am/pm
if (parseInt(segmentsTime[1],10) < 1 || parseInt(segmentsTime[1],10) > 12) {
time = invalidTimeString;
}
}
else {
// 24-hour time format
if (parseInt(segmentsTime[1],10) > 23) {
time = invalidTimeString;
}
}
if (time !== invalidTimeString && parseInt(segmentsTime[2],10) > 59) {
time = invalidTimeString;
}
}
else {
time = invalidTimeString;
}
if (time !== invalidTimeString) {
var jsDateFriendlyTime = segmentsTime[1] + ":" + segmentsTime[2] + " " + segmentsTime[3];
return new Date(date + " " + jsDateFriendlyTime).toGMTString().replace("UTC", "GMT");
}
else{
return time;
}
}
,为了以正确的格式呈现时间,可以使用toLocaleDateString()方法。
- 使用JavaScript将客户端日期/时间字符串转换为JSON日期/时间串
- Javascript 倒数计时器 - 客户端时间与 mySQL 时间
- 使用 JavaScript 的客户端日期/时间戳一致(考虑时区)
- 同步客户端和服务器端时间
- JavaScript编辑本地客户端时间
- javascript客户端时间到php服务器时间
- 显示客户端时间,而不是 javascript 中的服务器时间
- 将 JavaScript 的客户端时间获取到 PHP 中
- 如何使用客户端时区将数据库时间戳输出为客户端中的日期戳
- 引导日期选择器占用客户端PC时间,如何从服务器设置默认时间
- 服务器时间而不是客户端时间 JAVASCRIPT
- 如何使这个javascript函数实际收集服务器时间和倒计时,直到事件开始而不是浏览器/客户端时间
- FlipClock - 使用服务器时间而不是客户端时间
- 在浏览器上显示服务器时间而不是客户端时间
- 在服务器上将客户端时间转换为UTC以进行存储
- 客户端时间设置在javascript中破坏了可读日期
- 如何发送客户端's时间戳到Servlet
- 在c#中检索准确的客户端时间
- 获取服务器端时间和客户端时间之间的差异并显示它
- 比较客户端时间戳和服务器时间戳