2011-12-14 48 views
3

在我的應用程序中,我需要爲每個月的每一天存儲一個URL。從今天開始倒退。我會怎麼做?獲取本月每個NSDate作爲NSString

到目前爲止沒有問題得到今天的NSDate作爲的NSString:

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

NSString* str = [format stringFromDate:date]; 

所以我怎麼會去,例如,如果我想在一個字符串的日期,可以說,17天前?

PS。我想要使​​用這些日期並將它們存儲在一個字符串中,以獲取過去一個月中每天的網址,例如www.myurl.com/pictureYEAR-MONTH-DAY.jpg

回答

5

這與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]; 
} 

這將留下與NSDatesNSArray,並在當月每天一個日期。


如果你想這是「11天以前」的日期,你可以做到這一點很容易得:

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

NSDate *seventeenDaysAgo = [cal dateByAddingComponents:diff toDate:today]; 

一旦你有一個NSDate,這是很簡單的把它變成一串:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd"]; 

NSDate *date = ...; 
NSString *string = [formatter stringFromDate:date]; 
6

只需獲取當前日期的NSDateComponents ,然後從中提取一天,然後寫一個for循環,直到你達到1,每次從組件中創建一個新的日期,並將其存儲爲一個字符串。

代碼大概可以說以上的話那麼在這裏你去(測試):

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]; 
+2

是的!謝謝,這正是我一直在尋找的! – user1096112 2011-12-14 11:29:29

+1

@ user1096112不錯:)你可以把它標記爲接受嗎? – 2011-12-14 11:43:18