C# 用C语言检索准确的客户端时间#
直到今天我还在使用C# 用C语言检索准确的客户端时间#,c#,javascript,C#,Javascript,直到今天我还在使用DateTime.Now保存用户时间和数据的功能。在后期,我使用JavaScript获取客户端的日期和时间来维护时区。但是当我更改系统的日期和时间并尝试JavaScript时。它显示了我的电脑更改的时间。我需要如何让客户正确的当前日期和时间值。如何得到它 使用不同时区的客户端/服务器时,请不要超过C#&JavaScripts。 例如,在C#中,使用DateTime.UTCNow而不是DateTime.UTC。 每次保存时,您也应该保存时区,稍后您将能够计算本地时间。它也适用于夏
DateTime.Now代码>保存用户时间和数据的功能。在后期,我使用JavaScript获取客户端的日期和时间来维护时区。但是当我更改系统的日期和时间并尝试JavaScript时。它显示了我的电脑更改的时间。我需要如何让客户正确的当前日期和时间值。如何得到它
使用不同时区的客户端/服务器时,请不要超过C#&JavaScripts。
例如,在C#中,使用DateTime.UTCNow而不是DateTime.UTC。
每次保存时,您也应该保存时区,稍后您将能够计算本地时间。它也适用于夏令时更改。当使用来自不同时区的客户端/服务器时,您应该使用
例如,在C#中,使用DateTime.UTCNow而不是DateTime.UTC。
每次保存时,您也应该保存时区,稍后您将能够计算本地时间。它也适用于夏令时更改。DateTime。现在
在服务器上运行,并获取服务器上而不是客户端上配置的日期时间
您必须使用javascript获取客户端时间,您可以通过一个隐藏字段传递值,该字段可以使用javascript的new Date()
方法存储。要获取GMT的偏移量,请使用Date.getTimezoneOffset()
,它将以分钟为单位给出偏移量,例如+1 GMT的偏移量将返回-60
最好以GMT格式维护所有日期时间信息,然后根据客户需要使用偏移量。datetime。现在
在服务器上运行,并获取服务器上而不是客户机上配置的日期时间
您必须使用javascript获取客户端时间,您可以通过一个隐藏字段传递值,该字段可以使用javascript的new Date()
方法存储。要获取GMT的偏移量,请使用Date.getTimezoneOffset()
,它将以分钟为单位给出偏移量,例如+1 GMT的偏移量将返回-60
最好以GMT格式维护所有日期时间信息,然后根据客户需要使用偏移量。您无法获得实际的机器时间。您可以尝试计算客户端的时区,然后进行相应调整
这是一个快速搜索,它实现了一个解决方案,解决了使用JavaScriptDate
对象时出现的一些问题。您无法获得实际的机器时间。您可以尝试计算客户端的时区,然后进行相应调整
这是一个快速搜索,它实现了一个解决方案,解决了使用JavaScriptDate
对象时出现的一些问题。始终在服务器端以一种格式维护日期时间。我更喜欢DateTimeOffset,这会为我以正确的格式保存它。。你应该仔细阅读以下内容:
关于在客户端渲染,您有两种选择:
A) 当客户登录时,将其时区存储在cookie中,然后使用此时区为我们的客户提供所有datetime
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;
}
}
函数getDateAsUTC(时间,日期){
var regExTime=/^(\d{1,2}):(\d{2})([AP]M)?$/i;
var invalidTimeString=“无效时间”;
if(segmentsTime=time.replace(“,”).match(regExTime)){
如果(分段时间[3]){
//12小时时间格式,上午/下午
if(parseInt(segmentsTime[1],10)<1 | | parseInt(segmentsTime[1],10)>12){
时间=无效时间字符串;
}
}
否则{
//24小时制
if(parseInt(segmentsTime[1],10)>23){
时间=无效时间字符串;
}
}
if(time!==invalidTimeString&&parseInt(segmentsTime[2],10)>59){
时间=无效时间字符串;
}
}
否则{
时间=无效时间字符串;
}
if(时间!==invalidTimeString){
var jsDateFriendlyTime=segmentsTime[1]+”:“+segmentsTime[2]+”+segmentsTime[3];
返回新日期(日期+“”+jsDateFriendlyTime).togmString()。替换(“UTC”,“GMT”);
}
否则{
返回时间;
}
}
为了以正确的格式呈现时间,可以使用 始终在服务器端以一种格式维护日期时间。我更喜欢DateTimeOffset,这会为我以正确的格式保存它。。你应该仔细阅读以下内容: 关于在客户端渲染,您有两种选择: A) 当客户登录时,将其时区存储在cookie中,然后使用此时区为我们的客户提供所有datetime 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;
}
}
函数getDateAsUTC(时间,日期){
var regExTime=/^(\d{1,2}):(\d{2})([AP]M)?$/i;
var invalidTimeString=“无效时间”;
if(segmentsTime=time.replace(“,”).match(regExTime)){
如果(分段时间[3]){
//12小时时间格式,上午/下午
if(parseInt(segmentsTime[1],10)<1 | | parseInt(segmentsTime[1],10)>12){
时间=无效时间字符串;
}
}
否则{
//24小时制
if(parseInt(segmentsTime[1],10)>23){
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
}