如何查看一周中的哪一天(即星期二,星期五?)并比较两个NSDates?

时间:2009-02-24 21:28:59

标签: iphone objective-c

我正在做两件事:

  1. 检查一周是否过去了(基于星期几)
  2. 检查一天是否过去了(基于日期)
  3. 我不确定解决这个问题的最佳方法是什么,因为在比较两个NSDates时(一个在2009年1月1日21:30和另一个在2009年2月1日的00:30)我可以'只是看看24小时是否已经过去,因为在这种情况下它还没有。我可以通过从NSDate获取日期1/1/09来解决这个问题,但我不确定如何根据我看到的文档和谷歌链接来做到这一点。

    对于另一个问题,我不知道如何知道星期几是哪一天。我想如果1/1/09是星期二,星期一等等......是否有任何图书馆让你计算这个?这显然需要考虑到闰年和其他一些东西...也许有一个Objective-c库?

    感谢您的帮助!

2 个答案:

答案 0 :(得分:30)

您可以使用NSCalendar类的components:fromData:消息来获取各个日期组件:

// Sunday = 1, Saturday = 7
int weekday = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:theDate] weekday];

要比较两个日期,只需使用compare:消息:

switch([date1 compare:date2])
{
case NSOrderedSame:       /* they are the same date */ break;
case NSOrderedAscending:  /* date1 precedes date2 */ break;
case NSOrderedDescending: /* date2 precedes date1 */ break;
}

答案 1 :(得分:13)

您可以使用NSDateComponents

unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:units fromDate:date];

然后您可以像这样访问日期的各个部分:

[components year];
[components month];
[components day];

或者,您可以使用NSCalendar的{​​{1}}方法构建新的NSDate对象,并比较两个dateFromComponents对象。