c# - 如何测试 8 :00 PM is valid prior to 12:00 AM?

标签 c# asp.net datetime utc

全部,

我最近posted a question关于将用户登录限制在 4 小时内并得到很好的反馈/答案。

但是我遇到了一个让我难过的场景。

客户可以从晚上 8:00 到次日凌晨 12:00 登录 - 总共 4 小时。但是,随着时间的流逝,我的代码看到的是晚上 8:00,而不是上午 12:00 之前的时间是晚上 8:00。

如何让系统在第二天凌晨 12:00 之前将晚上 8:00 视为尚未过去的时间?

这是我的代码,使用带有 AM 和 PM 的 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 之前尚未过去的时间?

感谢您的帮助!

最佳答案

您的代码对我来说工作得很好。我相信这是您未在此处显示的某些代码或出于其他一些愚蠢的原因。我正在使用这段代码(以及它的许多变体)进行测试:

// force the date format to be 12hour like in US
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

DateTime start = DateTime.Parse("1/1/2013 7:00 PM").ToUniversalTime();
DateTime end = start.AddHours(5); // returns 1/2/2013 12:00:00 AM as it should

Console.WriteLine(end - start); // 05:00:00
Console.WriteLine((end - start) > TimeSpan.Zero); // True

关于c# - 如何测试 8 :00 PM is valid prior to 12:00 AM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997318/

相关文章:

ruby-on-rails - Ruby on Rails 3 时间 - 解析毫秒

c# - 使用 NAudio 在 C# 中播放 ohLibSpotify pcm 数据流

asp.net - 无法在 html 中调整图像大小 (cshtml asp.net mvc 4)

asp.net - 如何在Azure端点中传递 header ..?

javascript - 无法处理 jqGrid 中的复选框单击事件

python - 如何将datetime对象转换为float? AttributeError : 'datetime.datetime' object has no attribute 'datetime_to_float'

c# -/planner/plans 上的 C# : 401 - Unauthorized: Access is denied due to invalid credentials. 图形 API

c# - GroupBy Hour 然后两点之间的平均值

C# foreach 循环中的奇怪行为

python - 将格式化字符串转换为日期时间