如何在不考虑年份的情况下检查日期时间是否位于特定日期范围内?

问题描述 投票:0回答:1

我在认知上正在努力解决一个可能相当简单的问题。给定某个

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 月 1stFebruary 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 :(

我就是无法全神贯注地编写一个通用的、万无一失的解决方案。非常感谢任何帮助。

链接到 dotnetfiddle.net

c# .net datetime
1个回答
0
投票

一种方法是根据您的边界年份构造一个新的日期时间:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.