首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定在任意NSDate期间是否发生了NSTimeInterval?

如何确定在任意NSDate期间是否发生了NSTimeInterval?
EN

Stack Overflow用户
提问于 2009-06-04 00:08:32
回答 4查看 3K关注 0票数 0

我有一个NSTimeInterval,我想知道这个时间戳是否在日期的开始和结束之间。基本上我需要能够做一些事情,比如:

代码语言:javascript
复制
NSDate *today = [NSDate date];
NSTimeInterval myInterval = someInterval;

[date returnYesIfFallsThisDate:myInterval];

有没有一种直接的方法来判断我的NSTimeInterval是否与NSDate对象在同一天落地?

谢谢大家。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-04 02:52:03

一个NSTimeInterval就是几秒钟。要将其与NSDate进行比较,您需要解释相对于某个参考点的时间间隔,然后使用结果创建一个NSDate,然后比较两个NSDates。

有两个标准的参考日期:2001-01-011970-01-01 (后者是“UNIX time”)。如果这两个日期都不是正确的参考日期,请使用NSCalendar为正确的参考日期创建一个NSDate,然后使用create your NSDate of interest relative to that

现在来做个比较。

如果您只关心日历上的日期,那么您将创建NSDate,然后使用NSCalendar获取该日期的NSDateComponents。具体来说,您将获得年份、月份和月份中的某一天,然后对它们进行比较。

不需要担心“开始”和“结束”时间;事实上,如果您只关心日历上的日期,则可以完全忽略时间。

票数 1
EN

Stack Overflow用户

发布于 2009-06-04 00:18:01

从概念上讲,您需要两个构成目标日期的“开始”和“结束”的日期。然后,您可以直接针对这些日期的相应时间间隔测试时间间隔。

例如,如果我住在旧金山,那么我希望“开始”时间是太平洋时间上午12点,结束时间是太平洋时间晚上11:59:59.99999。

一旦你弄清楚了你想要考虑哪些时区/等作为开始和结束点,你就可以使用时间间隔来做测试:

代码语言:javascript
复制
if ((myInterval >= [earlyMorningDate timeIntervalSinceReferenceDate]) && 
    (myInterval <= [lateEveningDate timeIntervalSinceReferenceDate]))
{
    NSLog(@"Whoo hoo - it's the right date!");
}
票数 1
EN

Stack Overflow用户

发布于 2009-06-04 01:15:36

请记住,NSDate并不以任何形式表示“一天”,只表示一个时间点。您必须对使用NSCalendar (通常是用户的默认日历)转换的NSDateComponents做一些工作,以计算出开始和结束NSDate的值,并进行比较。

我会从你一天内的NSDate开始,并将它转换成NSDateComponents,但没有小时、分钟或秒。这里有一个快速的(未经测试的)示例来帮助您入门:

代码语言:javascript
复制
NSDateComponents *comps = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit) fromDate:[NSDate date]];
NSDateComponents *day = [[[NSDateComponents alloc] init] autorelease];
[day setDay:1];
NSDate *start = [[NSCalendar currentCalendar] dateFromComponents:comps];
NSDate *end = [[NSCalendar currentCalendar] dateByAddingComponents:day toDate:start options:0];

然后,您可以按照Jalkut先生的建议比较时间间隔(或者使用另一种方法,NSDate可以以几种不同的方式使用NSTimeIntervals )。不过,我肯定会花一些时间查看文档中的NSCalendar和NSDateComponents,您可能会找到比我建议的更好的方法来完成您需要做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/947947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档