【问题标题】:How to get number of current week in objective-c?如何在objective-c中获取当前周数?
【发布时间】:2011-10-25 13:28:45
【问题描述】:

我开发了一个需要获取当前周的应用。我试过这个:

- (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。这实际上是一个错误的结果。请给我建议任何想法。 提前致谢。

【问题讨论】:

  • 如果一年从星期六开始呢?这周不是第一周...这是上一年的最后一周 = 第 52 周:)。
  • @GrizzlyNetch:这是 ISO-8601 编号中前一年的第 52 年。这将是美国第一个编号。然后是美国的星期从星期日开始的事实。显然还有其他几个星期编号系统只是为了让事情变得更加混乱:en.wikipedia.org/wiki/Seven-day_week#Week_numbering(在正确处理令人沮丧方面,星期数字可能是唯一与 DST 相匹配的东西。)

标签: iphone ios nsdate nsdatecomponents


【解决方案1】:

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

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

此外,对于周的开始时间或结束时间以及一年中的周数如何编号,还有几个不兼容的标准。这使得周数成为指定日期范围和避免使用它们的最佳解决方案的一种令人困惑的方式。

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

【讨论】:

  • 我尝试将 dateString 的值更改为 @"03-01-2011",但 NSLog 现在显示 1 周。我应该在哪里定义 setMinimumDaysInFirstWeek?也许我应该在某个地方定义当前日期?
  • “第一周的最少天数”应该是指给定年份的第一周必须包括多少天。我假设如果您将其设置为 1,即使是星期日,一月的第一天也会在第一周。您应该在创建 NSCalendar 实例后调用 setter 方法。
  • 2011 年 1 月 3 日是星期一 - 在任何合理的周编号标准中都属于 2011 年的第 1 周。
  • @Noobass:要非常清楚:说 1.1.2011 的周数是“52”是正确(对于给定的“正确”值)。根据您的用例,您可能不想“修复”这种行为 - 您的应用显示的周数应该与您的用户使用的其他日历显示的一致。
  • 我明白了。非常感谢你。现在一切都清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多