C# 以分钟限制小时

C# 以分钟限制小时,c#,asp.net,datetime,C#,Asp.net,Datetime,我只想在12:30--14:00和18:00--21:00之间启用复选框 它拒绝12:45,但应该取这个值 DateTime.Now.Hour >= 12 && DateTime.Now.Minute >= 30 它拒绝13:12,但它应该取这个值 DateTime.Now.Hour >= 12 && DateTime.Now.Minute >= 30 提前感谢我建议您按照一天中的实际时间(用时间跨度值表示)来做: var firs

我只想在12:30--14:00和18:00--21:00之间启用复选框

它拒绝12:45,但应该取这个值

 DateTime.Now.Hour >= 12 && DateTime.Now.Minute >= 30
它拒绝13:12,但它应该取这个值

 DateTime.Now.Hour >= 12 && DateTime.Now.Minute >= 30

提前感谢

我建议您按照一天中的实际时间(用
时间跨度
值表示)来做:

var firstPeriodStart=新的时间跨度(12,30,0);
var firstPeriodEnd=新的时间跨度(14,0,0);
var secondPeriodStart=新的时间跨度(18,0,0);
var secondPeriodEnd=新的时间跨度(21,0,0);
DateTime time=DateTime.Now.TimeOfDay;
如果((时间>=firstPeriodStart&&time=secondPeriodStart&time
更好的是(IMO)使用
LocalTime
输入,因为它代表您真正感兴趣的内容


您还应该记住,上面的代码使用服务器上的本地时间-如果您的用户位于不同的时区,可以吗?

我建议您按一天中的实际时间(表示为
TimeSpan
值)执行:

var firstPeriodStart=新的时间跨度(12,30,0);
var firstPeriodEnd=新的时间跨度(14,0,0);
var secondPeriodStart=新的时间跨度(18,0,0);
var secondPeriodEnd=新的时间跨度(21,0,0);
DateTime time=DateTime.Now.TimeOfDay;
如果((时间>=firstPeriodStart&&time=secondPeriodStart&time
更好的是(IMO)使用
LocalTime
输入,因为它代表您真正感兴趣的内容


您还应该记住,上面的代码使用服务器上的本地时间-如果您的用户位于不同的时区,可以吗?

我必须承认我不了解实际问题。但是,您也可以使用可读性更好的
TimeSpan

var ts1Start = TimeSpan.FromHours(12) + TimeSpan.FromMinutes(30);
var ts1End = TimeSpan.FromHours(14);
var ts2Start = TimeSpan.FromHours(18);
var ts2End = TimeSpan.FromHours(21);
var now = DateTime.Now.TimeOfDay;
ASPxCheckBox_ForceClot.Enabled =  (now >= ts1Start && now < ts1End) 
                               || (now >= ts2Start && now < ts2End);
var ts1Start=TimeSpan.FromHours(12)+TimeSpan.FromMinutes(30);
var ts1End=时间跨度从小时(14);
var ts2Start=从小时开始的时间跨度(18);
var ts2End=从小时开始的时间跨度(21);
var now=DateTime.now.TimeOfDay;
ASPxCheckBox_ForceClot.Enabled=(现在>=ts1Start&现在=ts2Start&now

我的代码可以解决的一个可能的问题是,您使用的是
if
而不是
else
。因此,该复选框在启用后将永远不会被禁用。上面的代码总是设置
Enabled
属性。

我必须承认我不理解实际问题。但是,您也可以使用可读性更好的
TimeSpan

var ts1Start = TimeSpan.FromHours(12) + TimeSpan.FromMinutes(30);
var ts1End = TimeSpan.FromHours(14);
var ts2Start = TimeSpan.FromHours(18);
var ts2End = TimeSpan.FromHours(21);
var now = DateTime.Now.TimeOfDay;
ASPxCheckBox_ForceClot.Enabled =  (now >= ts1Start && now < ts1End) 
                               || (now >= ts2Start && now < ts2End);
var ts1Start=TimeSpan.FromHours(12)+TimeSpan.FromMinutes(30);
var ts1End=时间跨度从小时(14);
var ts2Start=从小时开始的时间跨度(18);
var ts2End=从小时开始的时间跨度(21);
var now=DateTime.now.TimeOfDay;
ASPxCheckBox_ForceClot.Enabled=(现在>=ts1Start&现在=ts2Start&now

我的代码可以解决的一个可能的问题是,您使用的是
if
而不是
else
。因此,该复选框在启用后将永远不会被禁用。上面的代码总是设置
Enabled
属性。

虽然使用实际DateTime或TimeSpan对象的建议很好,但真正的问题是您的布尔逻辑有缺陷

你应该写一些类似的东西

var now = DateTime.Now.TimeOfDay;

bool enabled =
    now >= new TimeSpan(12, 30, 0) && now < new TimeSpan(14, 0, 0) ||
    now >= new TimeSpan(18, 0, 0) && now < new TimeSpan(21, 0, 0);
var now=DateTime.now.TimeOfDay;
布尔启用=
现在>=新的时间跨度(12,30,0)和现在<新的时间跨度(14,0,0)||
现在>=新的时间跨度(18,0,0)和现在<新的时间跨度(21,0,0);
更新:这与Jon Skeet给出的答案基本相同,我只是在提交后才看到


另外,要注意时间的推移。根据您的要求,您可能必须设置计时器,以便在需要时更改复选框的状态。

虽然使用实际DateTime或TimeSpan对象的建议很好,但真正的问题是您的布尔逻辑有缺陷

你应该写一些类似的东西

var now = DateTime.Now.TimeOfDay;

bool enabled =
    now >= new TimeSpan(12, 30, 0) && now < new TimeSpan(14, 0, 0) ||
    now >= new TimeSpan(18, 0, 0) && now < new TimeSpan(21, 0, 0);
var now=DateTime.now.TimeOfDay;
布尔启用=
现在>=新的时间跨度(12,30,0)和现在<新的时间跨度(14,0,0)||
现在>=新的时间跨度(18,0,0)和现在<新的时间跨度(21,0,0);
更新:这与Jon Skeet给出的答案基本相同,我只是在提交后才看到


另外,要注意时间的推移。根据您的要求,您可能需要设置计时器,以便在需要时更改复选框的状态。

您想问什么?问题是什么,请详细解释你想问什么?有什么问题,请详细解释你又打我了!天哪,斯基特先生,总有一天我会打败你的@洛科德:该死的,我以为只要一小时一分钟就可以了。将改为TimeSpan版本。你又打败我了!天哪,斯基特先生,总有一天我会打败你的@洛科德:该死的,我以为只要一小时一分钟就可以了。将改为TimeSpan版本。我个人会使用括号使
&
|
的优先级更清晰。即使它是正确的(我一时记不起来),如果它是明确的,读者也会更清楚。@JonSkeet它通常对读者更清楚,我经常自己做。但通常不是在这种情况下,在这种情况下,计算是共轭的析取,每个共轭都有自己的直线。而且,在我所知道的所有语言中,合取优先于析取,就像在数学中一样。顺便说一句,这类似于乘法优先于加法。事实上,在代数中,合取是布尔乘法(
&&true
不会改变结果;
&&false
会使一切都变为假),析取是布尔加法(
| false
不会改变结果)。即使在这种情况下,我也会这样做-显然编译器并不关心这一切都是o