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

本文关键字:登录 网站 时间 NET 使用 TimeSpan C#ASP | 更新日期: 2023-09-27 18:08:41

全部,

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

使用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分钟,等等,因为TimeSpan给了我两个日期之间的差异。我希望它倒计时到0,比如3小时23分钟、2小时15分钟、1小时5分钟等。

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

感谢您的反馈。

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

我建议将所有内部DateTime保持在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.UtcNow/.Now,而是传入值。但由于我不知道你周围的代码和架构,我选择了简单的方法。

类似这样的事情,因为您知道限制是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.";
}