所有美国节日的列表作为NSDates

我正在寻找一种方式,把所有的美国节日当作一系列的NSDate 。 有没有办法来实现呢?

  • 在这里你可以find假期的RSS提要。 它没有列出年份,但在文档中,您将find有关如何更改date范围的信息。
  • 下载它。 我会build议ASIHTTPRequest这个任务。
    parsingRSS提要。 您可以通过普通的XMLparsing来完成,或者使用专门的parsing器。 MWFeedParser将是一个选项。
  • 保存date。 通过使用CoreData或事件工具包框架

如果你只想要美国联邦假期,我写了这个方法。 你可以使用这些技术来计算任何假期。

 -(NSArray *)getUSHolidyas{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy"; NSString *year = [formatter stringFromDate:[NSDate date]]; formatter.dateFormat = @"M/d/yyyy"; //Constant Holidays NSDate *newYearsDay = [formatter dateFromString:[NSString stringWithFormat:@"1/1/%@",year]]; //Use next year for the case where we are adding days near end of december. NSDate *indDay = [formatter dateFromString:[NSString stringWithFormat:@"7/4/%@",year]]; NSDate *vetDay = [formatter dateFromString:[NSString stringWithFormat:@"11/11/%@",year]]; NSDate *xmasDay = [formatter dateFromString:[NSString stringWithFormat:@"12/25/%@",year]]; //Variable Holidays NSInteger currentYearInt = [[[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:[NSDate date]] year]; NSDate *mlkDay = [self getTheNth:3 occurrenceOfDay:2 inMonth:1 forYear:currentYearInt]; NSDate *presDay = [self getTheNth:3 occurrenceOfDay:2 inMonth:2 forYear:currentYearInt]; NSDate *memDay = [self getTheNth:5 occurrenceOfDay:2 inMonth:5 forYear:currentYearInt]; // Let's see if there are 5 Mondays in May NSInteger month = [[[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:memDay] month]; if (month > 5) { //Check that we are still in May memDay = [self getTheNth:4 occurrenceOfDay:2 inMonth:5 forYear:currentYearInt]; } NSDate *labDay = [self getTheNth:1 occurrenceOfDay:2 inMonth:9 forYear:currentYearInt]; NSDate *colDay = [self getTheNth:2 occurrenceOfDay:2 inMonth:10 forYear:currentYearInt]; NSDate *thanksDay = [self getTheNth:4 occurrenceOfDay:5 inMonth:11 forYear:currentYearInt]; return @[newYearsDay,mlkDay,presDay,memDay,indDay,labDay,colDay,vetDay,thanksDay,xmasDay]; } -(NSDate *)getTheNth:(NSInteger)n occurrenceOfDay:(NSInteger)day inMonth:(NSInteger)month forYear:(NSInteger)year{ NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; dateComponents.year = year; dateComponents.month = month; dateComponents.weekday = day; // sunday is 1, monday is 2, ... dateComponents.weekdayOrdinal = n; // this means, the first of whatever weekday you specified return [[NSCalendar currentCalendar] dateFromComponents:dateComponents]; }