我怎样才能找出一个NSDate是否是一个工作日?

我怎样才能找出一个NSDate是否是一个工作日? 也就是说,根据用户当前的语言环境和日历设置是否是周末 – 所以不能硬编码为星期一至星期五?

NSCalendar具有第一个firstWeekday属性,但这似乎只是一个表象的东西; 星期天在美国,周一在英国。

编辑:我不担心假期,我只是想能够像内置的日历应用程序相同的方式阴影的日历周末。

iOS 8及更高版本的更新:

NSCalendar现在包含方法- (BOOL)isDateInWeekend:(NSDate *)date

它检查某个date是否属于某个特定的日历和区域设置的周末。

老答案

如果你只需要遮蔽周末, [NSDateComponents weekday]是你的朋友。 此方法将在星期天返回1,星期六返回7。

事实:大多数应用程序假定周末=周六和周日。 AFAIK这是正确的所有国家使用公历。 覆盖所有其他日历的唯一可能性是每个日历/区域设置一个本地数据库并监视更改。 如果发生这种变化,则需要更新应用程序或者必须下载新的数据。

如果我们谈论的是工作日(不仅是周末),我们正在谈论的东西

  1. 没有明确的定义(公司之间的工作日变化)
  2. 没有规定(例如 – date格式,时区等有国际通用的规格)
  3. 经常因当地法律而改变(例如增加假期)

你需要的是让用户根据自己的国籍和雇主来设定你的个人需求。

你可以得到,如果一天是星期一到星期五,但据我所知,根据位置,没有像NSDate工作日这样的事情,例如firstWeekday,所以你需要自己实现它。

使用NSDateComponents

 NSDate *date = [NSDate date]; NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:date]; NSLog(@"Weekday: %d", dateComponents.weekday); 

这也将区分设备是否在周日或周一被认为是一周的第一天的领域。