我在认知上正在与一个可能相当简单的问题作斗争.给定特定的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介于minmax之间,因为3rd April介于1st January31st December之间.我可以很容易地用new DateTime(min.Year, toCheck.Month, toCheck.Day) >= min && new DateTime(max.Year, toCheck.Month, toCheck.Day) <= max;这样的东西来验证这一点.

然而,我意识到,当年份重叠时,情况会变得更加复杂.例如,在下面的场景中,January 1st介于December 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 :(

我就是想不出一个通用的、防弹的解决方案.如有任何帮助,我们将非常感激.

Link to dotnetfiddle.net

推荐答案

逻辑很简单:

  • 以MMdd格式设置所有三个日期的格式,以便直接进行比较
  • 按如下方式比较这三个值:
  • 如果min = max,则:
    • is_between =
  • 其他
    • IS_BETWING=(to_check&>=min||to_check<;=max)

例如,如果您有[Dec 1,Feb 1]范围,您将判断Date是否大于/等于Dec 1或小于/等于Feb 1.

将上述逻辑转换为您 Select 的语言是微不足道的.

dotnet fiddle

Csharp相关问答推荐

在依赖性注入和继承之间进行 Select

. NET JSON属性自定义所需逻辑

从应用程序图API调用访问所有者字段

.NET 6控制台应用程序,RabbitMQ消费不工作时,它的程序文件中的S

如何在C#中从正则表达式中匹配一些数字但排除一些常量(也是数字)

在不添加不必要的尾随零的情况下本地化浮点型?

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

如何使用.NET6WPF打印车票?

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

C#LINQ延迟执行和嵌套方法

从Base64转换为不同的字符串返回相同的结果

如何使用EPPlus C#在单个单元格中可视化显示多行文字

将J数组转换为列表,只保留一个嵌套的JToken

具有嵌套属性的IGGroup

Maui:更改代码中的绑定字符串不会更新UI,除非重新生成字符串(MVVM)

NETSDK1201:对于面向.NET 8.0和更高版本的项目,默认情况下,指定RUNTIME标识符将不再生成自包含的应用程序

在Unity C#中按键点击错误的参数

Excel将';@';添加到具有范围的公式中

如何根据分割文本的块数来计算文本的大小?