【发布时间】:2013-04-06 12:18:50
【问题描述】:
全部,
我最近posted a question 将用户登录时间限制为 4 小时并得到了很好的反馈/答案。
但我遇到了一个让我难过的场景。
客户可以从晚上 8:00 到第二天凌晨 12:00 登录 - 总共 4 小时。但是,我的代码看到 8:00 PM 随着时间的流逝,而不是 8:00 PM 是 12:00 AM 之前的时间。
如何让系统将晚上 8:00 视为第二天凌晨 12:00 之前尚未过去的时间?
这是我使用上午和下午的 12 小时制的代码 - 不是 UTC 或 24 小时制:
var orderTime = Convert.ToDateTime(orderDate); // 8:00 PM
var expirationTime = orderTime.AddHours(4); // 12:00 AM of the next day
// timeRemaining should be 4 hours but is 0
// DateTime.Now is 8:00 PM of the current day
// so timeRemaining = 8:00 PM - 12:00 AM (should be 4 hours)
var timeRemaining = expirationTime - DateTime.Now;
// should be greater than 0 since timeRemaining is actually 4 hours (8:00 PM up to 12:00 AM of next day)
// but fails seeing it as passed
if (timeRemaining < TimeSpan.Zero)
Response.Redirect("TimedOut.aspx");
我怎样才能让这个场景有效?也就是说,系统将晚上 8:00 视为第二天凌晨 12:00 之前尚未过去的时间?
感谢您的帮助!
【问题讨论】:
-
我认为解决此问题的唯一方法是同时包含标记会话和验证是否/何时结束的日期。
-
@Cole Johnson - 我是一名盲人计算机程序员,无法使用此处网站上的一些功能 - 其中之一是格式化代码。既然您指出我需要学习如何格式化,那么您能否提供一些关于如何使用键盘而不是鼠标来格式化代码的说明?
-
@Soner Gönül - 非常感谢您格式化我的代码。我看到你在我的最后一个问题上也这样做了......非常感谢。
-
如果您使用晚上 11:59 而不是上午 12:00,则不需要日期。
-
这是你的全部代码吗?它显然可以按预期工作,或者至少我似乎找不到它不会的场景。