【问题标题】:Objective-c get day of week in number starting with Monday, NOT SundayObjective-c 从星期一开始获取星期几,而不是星期日
【发布时间】:2012-03-21 17:14:58
【问题描述】:

我正在为欧洲市场的应用制作自定义日历视图。在一个函数中,我应该得到星期几......我这样做了,但它返回从星期日开始的星期几。从星期一开始,我应该如何硬编码返回这个号码? 谢谢 这是我目前所拥有的:

-(int)getWeekDay:(NSDate*)date_
{
    NSLocale *frLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [gregorian setLocale:frLocale];
    NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:date_];
    int weekday = [comps weekday];

    NSLog(@"Week day is %i", weekday);
    return weekday;

}

【问题讨论】:

    标签: objective-c nsdate dayofweek


    【解决方案1】:

    您应该使用[NSCalendar setFirstWeekday:] 来执行此操作。

    【讨论】:

      【解决方案2】:

      正如 Joshua 在他的回答中所说,最好的方法是使用 [NSCalendar setFirstWeekday:]

      否则,您可以进行整数运算。 Vova 的方法很简单:

      if (weekday>1)
          weekday--; 
      else 
          weekday=7;
      

      下面这个也可以,虽然有点混乱:

      int europeanWeekday = ((weekday + 5) % 7) + 1;
      

      【讨论】:

      • 嗯,它不会依赖于系统本地设置?
      • 是的,更好的解决方案是使用条件 if(weekday>1) { weekday--; } else weekday=7;
      • 谢谢@yAak;修正了我的答案。 Vova:不,是否阅读过weekDay 上的NSDateComponents 文档? “工作日单位是从 1 到 n 的数字,其中 n 是一周中的天数。例如,在公历中,n 是 7,星期日用 1 表示。”由于您使用的是特定日历而不是系统日历,因此您将始终获得相同的结果。
      • 这简化为 EuropeanWeekday = weekday ... :[ 我也只是在纸上摆弄这个,所以不要难过,哈哈。
      • 自您修复以来未投票!然而,Joshua 使用[NSCalendar setFirstWeekday:...] 的答案可能是其他人来这个话题的最佳选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2021-12-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多