我正在制作一个功能来检查24小时格式的时间范围之间的时间,但是我的代码有一些问题,任何人都可以指出如何修复?
我的代码:
bool isDoTime(int starthour, int startminute, int endhour, int endminute)
{
TimeSpan start = new TimeSpan(starthour, startminute, 0);
TimeSpan end = new TimeSpan(endhour, endminute, 0);
TimeSpan add24h = new TimeSpan(24, 0, 0);
TimeSpan now = DateTime.Now.TimeOfDay;
if (starthour > endhour || (endhour == starthour && endminute <= startminute))
{
end += add24h;
}
if ((now > start) && (now < end))
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
问题:我想在20:30 - 3:30之间的当前时间返回true,但是当我运行下面的代码时.条件仅在8:30到00:00之间返回true,而在00:00 - 3:30之间不是这样
if (isDoTime(20,30,3,30) //return true from 20:30 - 3:30
{
//dosomething
}
Run Code Online (Sandbox Code Playgroud)
如果它跨越midninght,则在一个支票中分开,一个支票在同一天分开.
TimeSpan start = new TimeSpan(starthour, startminute, 0);
TimeSpan end = new TimeSpan(endhour, endminute, 0);
TimeSpan now = DateTime.Now.TimeOfDay;
//The readable version:
if(start>end){
//Must check if after start (before midnight) or before end (after midnight)
if((now > start) || (now < end)){
return true;
{
}
else
{
//Simple check - span is within same day
if ((now > start) && (now < end))
{
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
简短/神秘的版本:
return start > end ? (now > start) || (now < end) : (now > start) && (now < end);
Run Code Online (Sandbox Code Playgroud)