NSDateFormatter格式化日期的一周

时间:2013-02-19 16:40:05

标签: ios objective-c nsdate nsdateformatter

我一直在寻找一种格式化以下NSDate对象的方法:

19 Feb 2013

喜欢那个

18-25 Feb 2013

19日发生在2月18日至25日的一周内。

我无法轻松实现这一目标,是否在NSDateFormater中构建了功能?我应该自己实施吗?

1 个答案:

答案 0 :(得分:2)

我认为NSDateFormatter中没有内置功能来执行此操作。但是,Apple有一个example如何获得给定日期的一周的第一天和最后几天的NSDate值。这是他们获得当周星期日的例子:

NSDate *today = [[NSDate alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];

// Get the weekday component of the current date
NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit
          fromDate:today];

/*
Create a date components to represent the number of days to subtract from the current date.
The weekday value for Sunday in the Gregorian calendar is 1, so subtract 1 from the number of days to subtract from the date in question.  (If today is Sunday, subtract 0 days.)
*/
NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];
[componentsToSubtract setDay: 0 - ([weekdayComponents weekday] - 1)];

NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract
          toDate:today options:0];

/*
Optional step:
beginningOfWeek now has the same hour, minute, and second as the original date (today).
To normalize to midnight, extract the year, month, and day components and create a new date from those components.
*/
NSDateComponents *components =
     [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit |
          NSDayCalendarUnit) fromDate: beginningOfWeek];
beginningOfWeek = [gregorian dateFromComponents:components];

由于星期日不是所有语言环境中星期的开始,它们还会显示如何按日历的语言环境定义星期的开头:

NSDate *today = [[NSDate alloc] init];
NSDate *beginningOfWeek = nil;
BOOL ok = [gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek
                     interval:NULL forDate: today];