获取本月的每个NSDate作为NSString

在我的应用程序中,我需要为每个月的每一天存储一个URL。 从今天开始倒退 我将如何做到这一点?

到目前为止没有问题得到今天NSDate作为一个NSString:

NSDate* date = [NSDate date]; NSDateFormatter* format = [[[NSDateFormatter alloc]init]autorelease]; [format setDateFormat:@"yyyyMdd"]; NSString* str = [format stringFromDate:date]; 

那么,如果我想要17天前的string中的date,我将如何去呢?

PS。 我想使用这些date,并将它们存储在一个string中,以获取过去一个月中每天的url,例如www.myurl.com/pictureYEAR-MONTH-DAY.jpg

这与Alex的答案类似,但是看起来他只能从月初到今天的任何一天。 以下是你可以如何得到本月的所有日子:

 NSDate *today = [NSDate date]; NSCalendar *cal = [NSCalendar currentCalendar]; NSMutableArray *datesThisMonth = [NSMutableArray array]; NSRange rangeOfDaysThisMonth = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:today]; NSDateComponents *components = [cal components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSEraCalendarUnit) fromDate:today]; [components setHour:0]; [components setMinute:0]; [components setSecond:0]; for (NSInteger i = rangeOfDaysThisMonth.location; i < NSMaxRange(rangeOfDaysThisMonth); ++i) { [components setDay:i]; NSDate *dayInMonth = [cal dateFromComponents:components]; [datesThisMonth addObject:dayInMonth]; } 

这将与一个NSArrayNSDates一起离开,每个date在本月的一个date。


如果你想要一个“17天前”的date,你也可以很容易地做到这一点:

 NSCalendar *cal = [NSCalendar currentCalendar]; NSDate *today = [NSDate date]; NSDateComponents *diff = [[NSDateComponents alloc] init]; [diff setDay:-17]; NSDate *seventeenDaysAgo = [cal dateByAddingComponents:diff toDate:today]; 

一旦你有一个NSDate ,把它变成一个string是非常简单的:

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd"]; NSDate *date = ...; NSString *string = [formatter stringFromDate:date]; 

只需获取当前date的NSDateComponents ,然后从中提取date,然后编写一个for循环,直到达到1,每次从组件中创build新date并将其更改为string。

代码可以说比字还多,所以在这里你去(testing):

 NSMutableArray *dates = [[NSMutableArray alloc] init]; NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"yyyy-MM-dd"]; // you can set this to whatever you like NSDate *today = [NSDate date]; // get todays date NSCalendar *cal = [NSCalendar currentCalendar]; // needed to work with components NSDateComponents *components = [cal components:(NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit) fromDate:today]; NSUInteger day = [components day]; for (NSUInteger i=day; i>0; i--) { // loop through all days till down to 1 [components setDay:i]; // update the day in the components NSDate *date = [cal dateFromComponents:components]; [dates addObject:[fmt stringFromDate:date]]; // add the new date } for (NSString *date in dates) { NSString *str = [NSString stringWithFormat:@"www.myurl.com/picture/%@",date]; NSLog(@"%@",str); // voila, your URL. } [fmt release]; [dates release];