如何在objective-c中获得当前周数?

时间:2011-10-25 13:28:45

标签: iphone ios nsdate nsdatecomponents

我开发了一个需要获得本周的应用。我试过这个:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *dateString = @"1-1-2011";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:dateString];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comp = [gregorian components:NSWeekCalendarUnit fromDate:dateFromString];
    NSLog(@"%d", comp.week);

    [dateFormatter release];
}

但它告诉我52.这实际上是一个错误的结果。拜托,建议我任何想法。 提前谢谢。

1 个答案:

答案 0 :(得分:5)

星期日取决于正在使用的编号标准。例如,一年的ISO-8601标准defines week 1为“当年第一个星期四的一周”。

2011年1月1日是星期六,这意味着接下来的一周是2011年的第1周,即2010年12月27日至2010年1月21日的第52周。

此外,还有几个不相容的标准,用于数周开始或结束以及一年中的周数如何。这使得周数成为指定日期范围的混乱方式,也是避免使用它们的最佳解决方案。

从文档到NSCalendar,似乎您也可以使用setMinimumDaysInFirstWeek:来调整数周的编号方式。