NSDateComponents工作日不显示正确的工作日?
我得到了一个NSDate例如1/6 – 12(星期五),并试图找出它是什么工作日。 我的星期一从星期一开始,星期五应该是星期五。
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [calendar setFirstWeekday:2]; NSDateComponents *components = [calendar components:NSWeekdayCalendarUnit fromDate:firstOfJulyDate]; NSLog(@"weekday %i",components.weekday);
输出:工作日6
无论我设置setFirstWeekday什么,输出将永远是6.我做错了什么?
尝试做这样的事情:
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; [gregorian setFirstWeekday:2]; // Sunday == 1, Saturday == 7 NSUInteger adjustedWeekdayOrdinal = [gregorian ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:[NSDate date]]; NSLog(@"Adjusted weekday ordinal: %d", adjustedWeekdayOrdinal);
正如NSDateComponents的文档所述:
平日单位是数字1到n,其中n是一周中的天数。 例如,在公历中,n是7,星期天是1。
此值在使用日历的上下文中进行解释 – 请参阅“date和时间编程指南”中的“日历,date组件和日历单位”。
如果你看NSGregorianCalendar,如预期的那样,它将1-7的意思定义为星期六至星期六。
调用setFirstWeekday:2意味着你的星期一从星期一开始计算,比如这是否是这个月的第二周,等等。这并不意味着你的星期一突然变成了星期天。 2012年6月1日仍然是星期五,不是星期四,所以你得到6,而不是5。
如果不是星期几,你想知道从一周开始有多less天,这很简单:
(components.weekday - calendar.firstWeekday + 1) % 7
NSDateComponents不会自动同步所有组件,例如:
NSDate *date = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *component = [calendar components:NSDayCalendarUnit|NSMonthCalendarUnit|NSWeekdayCalendarUnit fromDate:date]; currentMonth = component.month; // printing the next 3 month's start dates MUST have the setYear! for (int i = currentMonth; i < currentMonth + 3; i++) { [components setDay:1]; [components setMonth:i]; [components setYear:2014]; NSDate *newDate = [calendar dateFromComponents:components]; NSDateComponents *components2 = [calendar components:NSDayCalendarUnit |NSMonthCalendarUnit | NSWeekdayCalendarUnit fromDate:newDate]; monthInt = [components2 month]; weekIndex = [components2 weekday]; }
一定要编码进入下一年的date(在循环之前包括一个简单的if语句)
- didReceiveLocalNotification方法在应用程序处于后台时未在应用程序委托中调用
- 在“〜/ Library / Developer / Xcode / iOS DeviceSupport”中缺lessiOS符号