C#ASP.NET使用TimeSpan限制登录网站的时间

C#ASP.NET使用TimeSpan限制登录网站的时间,c#,asp.net,datetime,login,C#,Asp.net,Datetime,Login,全部, 当客户登录我的网站时,我想显示在登录链接超时之前还有多少时间 由于某种原因,我无法使用C#中的TimeSpan结构来完成此任务: TimeSpan diff = (DateTime.Now - orderDate ); 当客户登录时,我想向客户显示他/她还有多少时间登录。。。“您有3小时33分钟的时间,直到此链接超时。”。。。“你有2小时25分钟,直到这个链接超时”等等 一旦达到4小时,当客户登录时,我会将他/她重定向到一个抱歉的。。。该链接已超时 所以一些Psudo代码可能是 i

全部,

当客户登录我的网站时,我想显示在登录链接超时之前还有多少时间

由于某种原因,我无法使用C#中的TimeSpan结构来完成此任务:

TimeSpan diff = (DateTime.Now - orderDate   );
当客户登录时,我想向客户显示他/她还有多少时间登录。。。“您有3小时33分钟的时间,直到此链接超时。”。。。“你有2小时25分钟,直到这个链接超时”等等

一旦达到4小时,当客户登录时,我会将他/她重定向到一个抱歉的。。。该链接已超时

所以一些Psudo代码可能是

if (diff.Hours >= 4)
{
response.redirect("log_in_timed_out.aspx");
}
else
{
lblTimeRemaining.Text = "You have " + diff.Hours + " hours and " + diff.Minutes + " minutes remaining until the link times out.";
}
此psudo代码使小时和分钟向上计数,而不是向下计数到0。所以我登录,它说你有1小时33分钟,2小时12分钟,等等,因为时间跨度给了我两个日期之间的差异。我希望它倒计时到0,比如3小时23分钟,2小时15分钟,1小时5分钟,等等

如何显示客户每次使用TimeSpan结构登录并将其倒计时为0时剩余的时间


感谢您的反馈。

类似这样的内容,因为您知道限制为4小时,请将4小时添加到orderDate,然后只取UtcNow之间的差异,条件应更改为

TimeSpan diff = (orderDate.AddHours(4) - DateTime.UtcNow);


if (diff < TimeSpan.Zero)
{
    response.redirect("log_in_timed_out.aspx");
}
else
{
    lblTimeRemaining.Text = "You have " + diff.Hours + " hours and " + diff.Minutes + " minutes remaining until the link times out.";
}
TimeSpan diff=(orderDate.AddHours(4)-DateTime.UtcNow);
if(差值<时间跨度0)
{
重定向(“log_in_timed_out.aspx”);
}
其他的
{
lblTimeRemaining.Text=“在链接超时之前,您还有“+diff.Hours+”小时和“+diff.Minutes+”分钟。”;
}

类似的内容,因为您知道限制是4小时,所以将4小时添加到orderDate,然后只取UtcNow之间的差值,条件应更改为

TimeSpan diff = (orderDate.AddHours(4) - DateTime.UtcNow);


if (diff < TimeSpan.Zero)
{
    response.redirect("log_in_timed_out.aspx");
}
else
{
    lblTimeRemaining.Text = "You have " + diff.Hours + " hours and " + diff.Minutes + " minutes remaining until the link times out.";
}
TimeSpan diff=(orderDate.AddHours(4)-DateTime.UtcNow);
if(差值<时间跨度0)
{
重定向(“log_in_timed_out.aspx”);
}
其他的
{
lblTimeRemaining.Text=“在链接超时之前,您还有“+diff.Hours+”小时和“+diff.Minutes+”分钟。”;
}

我建议将所有内部
日期时间保持在
UTC
中,并且仅转换为本地时间显示。因此,我使用
DateTime.UtcNow
而不是
DateTime.Now
并假设
orderTime
也是UTC格式

我首先计算链接过期的时间,然后计算还有多少时间

DateTime expirationTime = orderTime.AddHours(4);
TimeSpan timeRemaining = expirationTime - DateTime.UtcNow;
if(timeRemaining<TimeSpan.Zero)
  Error("Expired");
else
  Write("Remaining {0} hours {1} minutes",timeRemaining.Hours, timeRemaining.Minutes);
DateTime expirationTime=orderTime.AddHours(4);
TimeSpan timeRemaining=expirationTime-DateTime.UtcNow;

如果(剩余时间我建议将所有内部
DateTime
保持在
UTC
中,并且只转换为本地时间显示。因此我使用
DateTime.UtcNow
而不是
DateTime。现在
并假设
orderTime
也在UTC中

我首先计算链接过期的时间,然后计算还有多少时间

DateTime expirationTime = orderTime.AddHours(4);
TimeSpan timeRemaining = expirationTime - DateTime.UtcNow;
if(timeRemaining<TimeSpan.Zero)
  Error("Expired");
else
  Write("Remaining {0} hours {1} minutes",timeRemaining.Hours, timeRemaining.Minutes);
DateTime expirationTime=orderTime.AddHours(4);
TimeSpan timeRemaining=expirationTime-DateTime.UtcNow;

如果(TimeRemaining您应该使用
UtcNow
而不是
Now
,否则您会对由于DST切换而只获得3小时的客户感到愤怒。您有什么问题吗?您的伪代码在我看来很好。我个人不会重定向它们,而是在适当的位置显示错误。我希望lblTimeRemaining显示时间倒数。例如,4小时rs 00分钟,3小时15分钟,2小时13分钟,等等。如果我使用psudo代码…它会向上计数,而不是向下计数。因此,这行代码:抱歉在完成注释之前提交…lblTimeRemaining.Text=“在链接超时之前,您还有“+diff.hours+”小时和“+diff.minutes+”分钟。”;实际上是在计算小时/分钟,因为它显示了时间之间的差异。因此,我登录时,它会显示您有1小时23分钟、2小时15分钟、3小时45分钟等。因为时间跨度结构给出了两个时间之间的差异。您应该使用
UtcNow
而不是
现在
,否则您将让那些因为DST切换而只得到3h的客户生气。你有什么问题?我觉得你的伪代码很好。就我个人而言,我不会重定向他们,而是显示错误。我希望lblTimeRemaining显示时间倒计时。例如,4小时00分钟,3小时15分钟,2小时13分钟,等等。如果我使用psudo代码…它向上计数,而不是向下计数。因此,这一行:抱歉,在完成评论之前提交…lblTimeRemaining.Text=“在链接超时之前,您还有“+diff.Hours+”小时和“+diff.Minutes+”分钟。”;实际上是在计算小时/分钟,因为它显示了时间之间的差异。所以我登录时,它说你有1小时23分钟,2小时15分钟,3小时45分钟,等等。因为时间跨度结构给出了两个时间之间的差异。
diff.hours true…然后diff.minutes
diff.minutes
diff.Hours true…那么diff.Minutes
diff.Minutes谢谢!正是我想要的,谢谢你为其他人指出了阅读内容…读TimeSpan timeRemaining=orderTime-DateTime.UtcNow;的一行不正确…它应该读TimeSpan timeRemaining=expirationTime-DateTime.UtcNow;-它应该使用expirationTime而不是orderTime.Thank!正是我想要的,谢谢你为其他人指出了阅读的内容…读TimeSpan timeRemaining=orderTime-DateTime.UtcNow;的一行不正确…它应该读TimeSpan timeRemaining=expirationTime-DateTime.UtcNow;-它应该使用expirationTime而不是orderTime。