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?
感谢您的反馈。
我建议将所有内部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.";
}