【问题标题】:How to get calendar events for specific date?如何获取特定日期的日历事件?
【发布时间】:2011-11-01 21:23:41
【问题描述】:

我有一个包含 StartDateTime 和 EndDateTime 的日历事件。这些事件作为记录存储在数据库中。我想获取特定日期的所有事件。有多种场景会立即浮现在脑海中。

给定 2011 年 12 月 1 日的特定日期,我想获取 2011 年 12 月 1 日(从上午 12:00:00 到晚上 11:59:59)的事件。

所以我需要选择:

  1. StartDateTime 和 EndDateTime 属于 12/01/2011 12:00:00 AM 和 12/01/2011 11:59:00 PM 范围内的事件

  2. 跨越到第二天的事件。即 StartDateTime 是在 2011 年 12 月 1 日晚上 11:59:59 之前,但 EndDateTime 是将来的某个时间

  3. EndDateTime 在 2011 年 12 月 1 日晚上 11:59:59 之前且 StartDateTime 在 2011 年 12 月 1 日凌晨 12:00:00 之前的事件

  4. 跨越多天的事件。即 StartDateTime 在 12/01/2011 12:00:00 AM 之前,EndDateTime 在 12/01/2011 11:59:59 PM 之后

我可能会错过其他场景。我觉得这不是一个原始问题,并且有一些方法可以完全满足我的需要。有选择这些事件的标准方法吗?

【问题讨论】:

  • 这些事件在哪里以及如何表示?您的问题不清楚。
  • 这些事件是数据库表中的记录。每条记录都有日期时间类型的 StartDateTime 和 EndDateTime。我正在尝试使用 LINQ 查询这些事件

标签: c# .net sql datetime


【解决方案1】:

我认为您的 4 个案例可以分解为一个语句(伪代码)

if ((StartDate <= InputDate) && (EndDate >= InputDate))

【讨论】:

  • 请注意,如果您将InputDate 更改为timestamp(因为您的数据似乎当前已存储),您需要将StartDate 比较为小于 下一个 日的开始,然后EndDate输入 日期的开始。与date 数据类型相比,此语句可以正常工作。
【解决方案2】:

结合 Jason 和 X-Zero 提出的解决方案后,我得到了。

DateTime inputDateStart = inputDate;
DateTime beginningOfNextDay = inputDate.AddDays(1);


IQueryable<MyEvent> inputDayEvents = (<collection of all the events here>)
.Where(e => e.StartDateTime < beginningOfNextDay && e.EndDateTime >= inputDateStart)

这是查询的可视化表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多