C#:检查datetime.Day是否在一定范围内的有效方法?

C#:检查datetime.Day是否在一定范围内的有效方法?,c#,C#,给定一个DateTime,我想检查.Day是否在一个数字之间,比如15到19之间 因此,2013年9月16日通过,但2013年9月20日失败 谢谢,包括 var date = DateTime.Now; if (date.Day >= 15 && date.Day <= 19) { return true; } var date=DateTime.Now; 如果(date.Day>=15&&date.Day 15&&date.Day=15&&date

给定一个
DateTime
,我想检查
.Day
是否在一个数字之间,比如15到19之间

因此,
2013年9月16日
通过,但
2013年9月20日
失败

谢谢,包括

var date = DateTime.Now;
if (date.Day >= 15 && date.Day <= 19)
{
        return true;
}
var date=DateTime.Now;
如果(date.Day>=15&&date.Day 15&&date.Day<19)
{
返回true;
}

我不能100%确定哪一个是正确的;)

像这样的方法应该会奏效:

var date = DateTime.Now;
return (date.Day >= 15 && date.Day <= 19);
var date=DateTime.Now;
返回(date.Day>=15&&date.Day=或19)

要正确测试日期(天)是否在给定的数字之间,必须使用整个日期,否则如果日期到达月末,公式将失败

下面的示例通过使用
AddDate
增大边界日期来增加天数(或减去天数)来检查保证金。然后检查当前日期是否在边界之间

var now = DateTime.Now;
if(date.AddDays(-5) < now && now < date.AddDays(5))
{
   return true;
}
var now=DateTime.now;
如果(date.AddDays(-5)
如果((DateTime.Today.Day>=15)和&(DateTime.Today.Day编辑:(由于您在图片(评论)中看到的错误,我无法发布答案。)

private bool IsInRange(DateTime yourDate、DateTime lowersenger、DateTime highestRange){

return yourDate.Day>=lower.Day&&yourDate.Day您可以直接使用
Day
属性,使用其他答案中的代码检查您的日期是否在某个范围内

从.NETFramework2.0开始,DateTime结构包含一个64位字段,该字段由一个与Ticks字段连接的私有种类字段组成

因此,比较
DateTime
实例的最有效方法是使用
Ticks
属性:

DateTime dateToValidate = SomeDate();
DateTime start = SomeRangeStart();
DateTime end = SomeRangeEnd();

return start.Ticks <= dateToValidate.Ticks && dateToValidate.Ticks <= end.Ticks;
DateTime dateToValidate=SomeDate();
DateTime start=SomeRangeStart();
DateTime end=SomeRangeEnd();


return start.勾选如果现在是9月30日,这将不起作用;@robvandervier:这不是期望的行为吗?不应该是
@Habib我是说
日期.Day
检查不考虑月份。@robvandervier:OP没有提到关于月份检查的要求…-1这与什么有什么关系@罗特恩。你们所有人都很快投了反对票,我试图解释,如果你试图测试的日期接近一个月的开始或结束,那么仅仅检查
.Day
是不够的。因此,你必须测试整个日期是否在日期之间。这真的不是问题。它没有说明现在
的任何内容otem最初的问题是关于约会?否则为什么OP会提到两次约会?无论如何,我猜OP最终会发现。我否决了一个我认为是错误的答案。我对否决投票给出了反馈,因为这是一个网站指南。你不应该把它当作个人问题。为什么我不能添加答案?@meorfi:别担心。看起来这很奇怪stion得到了足够多的答案:D@huMptyduMpty,当我注意到这个问题时,没有答案…为什么要同时检查其中一个是否为假?这太复杂了。很抱歉,我无法提交完整答案,因为stackoverflow站点阻止了我的方法,其中包含单词
return
:(为什么不直接
返回yourDate.DayhighestRange.Day
?我不知道你为什么要使用按位&运算符。你应该使用布尔| |运算符,因为Rotem指出只有一个必须为真。是的,我最初的方法是你粘贴的,但我不知道为什么stackoverflow不允许我发布它。)。。。我将显示包含错误的代码段![stackoverflow在代码中验证为错误][1][1]:+1第二种方法是最有效的。谢谢!我的第二种方法基于您的评论。如果(…),则无需使用
返回true;否则返回false;
。每当您看到可以用
return…;
替换它时,在这种情况下,感觉它是反向的,它只是
return!…;
var now = DateTime.Now;
if(date.AddDays(-5) < now && now < date.AddDays(5))
{
   return true;
}
if((DateTime.Today.Day >= 15) && (DateTime.Today.Day <= 19))
{
    //do something
}
else
    //do something else
}
private bool IsInRange(DateTime yourDate, DateTime lowestRange, DateTime highestRange) {
   return yourDate.Day >= lowestRange.Day && yourDate.Day <= highestRange.Day; 
}
DateTime dateToValidate = SomeDate();
DateTime start = SomeRangeStart();
DateTime end = SomeRangeEnd();

return start.Ticks <= dateToValidate.Ticks && dateToValidate.Ticks <= end.Ticks;