我在认知上正在努力解决一个可能相当简单的问题。给定某个
DateTime
,我如何验证该日期(不考虑其年份)是否位于其他两个日期之间?
一个例子:
DateTime toCheck = new DateTime(1900, 3, 4);
DateTime min = new DateTime(2024, 1, 1);
DateTime max = new DateTime(2024, 12, 31);
// True - 'toCheck' is between 'min' and 'max'
在上面的代码片段中,
toCheck
位于min
和max
之间,因为4月3日位于1月1日和12月31日之间。我可以用类似new DateTime(min.Year, toCheck.Month, toCheck.Day) >= min && new DateTime(max.Year, toCheck.Month, toCheck.Day) <= max;
之类的东西轻松验证这一点。
但是,我意识到当年份重叠时,事情会变得更加复杂。例如,在以下场景中,January 1st 位于 12 月 1st 和 February 1st 之间,但我的检查失败(显然)。
DateTime toCheck = new DateTime(1900, 1, 1);
DateTime min = new DateTime(2024, 12, 1);
DateTime max = new DateTime(2025, 2, 1);
// False - but should actually be True :(
我就是无法全神贯注地编写一个通用的、万无一失的解决方案。非常感谢任何帮助。
一种方法是根据您的边界年份构造一个新的日期时间:
DateTime toCheck = new DateTime(1900, 3, 4);
DateTime min = new DateTime(2024, 1, 1);
DateTime max = new DateTime(2024, 12, 31);
if(new DateTime(min.Year, toCheck.Month, toCheck.Day) > min
&& new DateTime(max.Year, toCheck.Month, toCheck.Day) < max)
{
// Within range
}