gpt4 book ai didi

c# - 如何比较日期时间对象中的月份和日期

转载 作者:太空狗 更新时间:2023-10-29 21:53:05 26 4
gpt4 key购买 nike

在我的 C# 程序中,我遇到了一个障碍,我有一个存储日期范围的表(列是日期范围 ID (int)、开始日期 (DateTime) 和结束日期 (DateTime)。我想查询该表并返回仅在特定日期范围内的行。我不能使用 datetime.date,因为它包括年份。

例如,我想查询表并获取介于 01-01 和 5-31 之间的所有日期范围。

我尝试使用以下 lambda 来查询表,但我的结果集是空的。

List<DateRanges> tempDateRangeList = dataContext
.DateRanges
.Where(r=>r.BeginDate.Month <= startDate.Month
&& r.EndDate.Month >= finishDate.Month)
.ToList();

tempDateRangeList = tempDateRangeList.Where(r=>r.BeginDate.Day <= startDate.Day
&& r.EndDate.Day >= finishDate.Day)
.ToList();

有没有人对我如何实现这一目标有任何建议?

编辑:

BeginDate 和 EndDate 的示例将是如下列表:

开始日期 1/1/2016、5/25/2016、9/11/2016

结束日期 5/24/2016、9/10/2016、12/31/2016

过滤日期为:开始日期 = 12/8完成日期 = 12/12

预期结果:9/11 开始日期12 月 31 日结束

最佳答案

您的条件有两种情况 - 月份等于边界月份,在这种情况下您必须测试日期编号,以及不同的月份,您忽略日期。因此查询:

List<DateRanges> tempDateRangeList = 
dataContext.DateRanges.Where(r =>
((r.BeginDate.Month < startDate.Month) ||
(r.BeginDate.Month == startDate.Month && r.BeginDate.Day <= startDate.Day)) &&
((r.EndDate.Month > finishDate.Month) ||
(r.EndDate.Month == finishDate.Month) && r.EndDate.Day >= finsihDate.Day))
.ToList();

条件很难看,很难理解,但涵盖了所有情况。此查询返回定义完全属于边界日期的日期范围的所有记录。

如果您希望查找与过滤范围重叠(完全或部分)的记录,那么查询将是:

List<DateRanges> tempDateRangeList = 
dataContext.DateRanges.Where(r =>
((r.BeginDate.Month < endDate.Month) ||
(r.BeginDate.Month == endDate.Month && r.BeginDate.Day <= endDate.Day)) &&
((r.EndDate.Month > startDate.Month) ||
(r.EndDate.Month == startDate.Month) && r.EndDate.Day >= startDate.Day))
.ToList();

这种情况可能会扭曲你的思维,但它工作正常。

关于c# - 如何比较日期时间对象中的月份和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41027809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com