我怎样才能知道NSDate是否是营业日?

时间:2013-07-09 10:34:30

标签: ios objective-c nsdate nscalendar nslocale

如何判断NSDate是否是营业日?也就是说,根据用户当前的语言环境和日历设置,它是否是一个周末 - 所以不是硬编码只是周一到周五?

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

编辑:我不担心假期,我只想以与内置日历应用程序相同的方式遮盖日历的周末。

3 个答案:

答案 0 :(得分:5)

iOS 8及更高版本的更新:

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

检查特定日历中的日期是否属于周末。区域设置。

旧答案

如果您只想在周末遮荫,[NSDateComponents weekday]是您的朋友。此方法将在星期日返回1,在星期六返回7。

事实:大多数应用程序假设周末=周六&星期日。 AFAIK对所有使用格里高利历的国家都是正确的。覆盖所有其他日历的唯一可能性是每个日历/区域设置具有本地数据库并监视更改。如果发生此类更改,则需要更新应用程序或必须下载新数据。

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

  1. 没有明确的定义(公司之间的营业日变化是什么)
  2. 没有规范(例如 - 日期格式,时区等具有国际认可的规范)
  3. 经常因当地法律(例如假期补充)而改变
  4. 您需要的是让用户根据个人和雇主的需要设置您的应用程序。

答案 1 :(得分:0)

如果当天是星期一到星期五,你可以得到,但据我所知,NSDate的营业日没有根据地点的情况,例如firstWeekday,所以你需要自己实施。< / p>

答案 2 :(得分:-1)

使用NSDateComponents

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

这也可以区分设备是否位于星期日或星期一被认为是一周的第一天。