UITableview标题栏有一周的日期?

时间:2013-06-07 18:32:08

标签: ios objective-c uitableview

如何将UITableview的标题与日期相对应?

我知道我可以使用以下方式编辑标题:

self.title=@"meals for ..";

我想将日期添加一周。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

你可以得到这样的日期:

NSDate *theDateToday = [NSDate date];

并将其格式化为:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd"];
NSString *theDateAsAString = [dateFormatter stringFromDate:theDateToday];

将它与你喜欢的结合起来:

self.title = [NSString stringWithFormat:@"meals for %@", theDateAsAString];

至于查找一周的日期,您可以尝试调整this answer

- (NSString *)getWeekStartDateAsString:(NSDate *)date {

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];

    int dayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week

    [components setDay:([components day] - ((dayofweek) - 2))];// for beginning of the week.

    NSDate *beginningOfWeek = [gregorian dateFromComponents:components];
    NSDateFormatter *dateFormat_first = [[NSDateFormatter alloc] init];
    [dateFormat_first setDateFormat:@"yyyy-MM-dd"];
    dateString2Prev = [dateFormat stringFromDate:beginningOfWeek];

    weekstartPrev = [[dateFormat_first dateFromString:dateString2Prev] retain];

    return weekstartPrev;

}

- (NSString *)getWeekEndDateAsString:(NSDate *)date {

    NSCalendar *gregorianEnd = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *componentsEnd = [gregorianEnd components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];

    int Enddayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:today] weekday];// this will give you current day of week

    [componentsEnd setDay:([componentsEnd day]+(7-Enddayofweek)+1)];// for end day of the week

    NSDate *EndOfWeek = [gregorianEnd dateFromComponents:componentsEnd];
    NSDateFormatter *dateFormat_End = [[NSDateFormatter alloc] init];
    [dateFormat_End setDateFormat:@"yyyy-MM-dd"];
    dateEndPrev = [dateFormat stringFromDate:EndOfWeek];

    weekEndPrev = [[dateFormat_End dateFromString:dateEndPrev] retain];

    return weekEndPrev;

}

您最终的结果可能如下所示:

self.title = [NSString stringWithFormat:@"meals for %@-%@", [self getWeekStartDateAsString:theDateToday], [self getWeekEndDateAsString:theDateToday]];

答案 1 :(得分:0)

一个鲜为人知的NSCalendar方法将是IMO的最佳选择

rangeOfUnit:startDate:interval:forDate:。它为您提供特定时间单位的开始和持续时间(间隔)。有了它,很容易在使用的日历中找到一周的开始,并添加范围-1以获得该周的最新秒。

使用很少见的localizedStringFromDate:dateStyle:timeStyle: Available in OS X v10.6, iOS 4.0,可以很容易地创建日期的本地化表示。

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startOfTheWeek;
NSDate *endOfWeek;
NSTimeInterval interval;
[cal rangeOfUnit:NSWeekCalendarUnit 
       startDate:&startOfTheWeek 
        interval:&interval 
         forDate:now];
//startOfWeek is 2013-06-02 22:00:00 +0000 now (note: it is GMT with timezone support for my timezone Europe/Berlin/DST)

endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval-1];
// 2013-06-09 21:59:59 +0000

NSString *text = [NSDateFormatter localizedStringFromDate:startOfTheWeek 
                                                dateStyle:NSDateFormatterShortStyle 
                                                timeStyle:NSDateFormatterNoStyle];
text = [text stringByAppendingString:@" to "];
text = [text stringByAppendingFormat:@"%@", [NSDateFormatter localizedStringFromDate:endOfWeek 
                                                                           dateStyle:NSDateFormatterShortStyle 
                                                                           timeStyle:NSDateFormatterNoStyle]];

self.title=text;

为我的德语语言环境带来03.06.13 to 09.06.13,其中星期一是本周的开始。