检查时间间隔是不是在今天

Posted

技术标签:

【中文标题】检查时间间隔是不是在今天【英文标题】:Check if time interval falls into the today检查时间间隔是否在今天 【发布时间】:2015-01-23 12:23:37 【问题描述】:

我有一个包含事件和日历的核心数据,我需要构建一个谓词请求以仅获取今天的事件。例如:

事件(在核心数据表中,它是两个日期类型的属性)

1) Start 10/01/2015 14:00:00 Ends 10/01/2015 16:00:00
2) Start 10/01/2015 14:00:00 Ends 11/01/2015 19:00:00
3) Start 09/01/2015 12:00:00 Ends 12/01/2015 16:00:00
4) Start 09/01/2015 12:00:00 Ends 09/01/2015 16:00:00

今天是

10/01/2015

我需要请求返回 3 个事件 (#1-2-3) 并将 #4 排除为:

1) Is Starting today and Ends today
2) Starts today and Ends tomorrow (so it is running today as well)
3) Started yesterday and Ends after tomorrow (so it is running today as well)
4) Is not running today

所以问题是最好的方法是什么?也许有人至少可以提示如何确定今天的开始时间戳和结束时间戳(10/01/2015 00:00:00 和 10/01/2015 24:00:00,如果我是正确的???)

【问题讨论】:

所以你在一个字符串中有开始和结束日期? @ClausBönnhoff: No-no) 我在核心日期表中有两个日期类型的属性... 那么只获取 startdate 为 today 的数据有什么问题?还是我理解错了? 不清楚你在问什么。如果你同时想要 1、2、3 和 4,你只需要使用 NSPredicate 来获取,使用 NSDateComponents 获取昨天和明天的 NSDate (可能使用“午夜”,并使用这样的谓词:(startDate >= %@) AND (endDate <= %@), yesterdayDate, tomorrowDate; 您的问题到底是什么?如何获得代表日期边界的NSDates?如何构建NSPredicate 字符串? 【参考方案1】:

好的,我认为您的主要问题是如何获取日期边界(即代表特定日期 0:00h 的 NSDate 实例)。这其实很简单:

NSDate *startOfDay;
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay
                                startDate:&startOfDay
                                 interval:NULL
                                  forDate:yourDate];

给定任何日期 (yourDate),startOfDay 将是同一日期,但在 0:00h。

有了这些信息,构建谓词字符串应该很简单。条件应该是这样的:

event.startDate <= endOfDay AND event.endDate >= startOfDay

【讨论】:

谢谢丹尼尔,实际上我设法获得了 DateStart 和 DateEnd 时间戳(但你的方式要好得多,并且会使用它),但主要问题是构建预测请求......无法数字知道怎么做,看起来它一定是一个复杂的...... 看起来像这样: if (eventStart >= dayStart and eventStart = dayStart) OR (eventStart=dayEnd) OR (eventStart >=dayStart ) 不应该是一个简单的event.startDate &lt;= endOfDay AND event.endDate &gt;= startOfDay 工作吗?还是我错过了什么? 例如,如果活动昨天开始,明天结束,在这种情况下将不会显示...但它必须因为活动今天处于活动状态...我说的对吗? 当你在柏林时,啤酒就在我身上!)

以上是关于检查时间间隔是不是在今天的主要内容,如果未能解决你的问题,请参考以下文章

检查两个日期间隔是不是相交

我们如何检查唯一 ID 的任意 2 个间隔是不是重叠?

用按键精灵如何巧妙获取时间间隔?

Java中的Joda-Time间隔是不是有替代方法,它可以作为结束时间

如何在给定间隔下使用牛顿法

比较特定时间间隔的不同格式的纪元日期