我怎样才能找出一个NSDate是否是一个工作日?
我怎样才能找出一个NSDate
是否是一个工作日? 也就是说,根据用户当前的语言环境和日历设置是否是周末 – 所以不能硬编码为星期一至星期五?
NSCalendar
具有第一个firstWeekday
属性,但这似乎只是一个表象的东西; 星期天在美国,周一在英国。
编辑:我不担心假期,我只是想能够像内置的日历应用程序相同的方式阴影的日历周末。
iOS 8及更高版本的更新:
NSCalendar
现在包含方法- (BOOL)isDateInWeekend:(NSDate *)date
它检查某个date是否属于某个特定的日历和区域设置的周末。
老答案
如果你只需要遮蔽周末, [NSDateComponents weekday]
是你的朋友。 此方法将在星期天返回1,星期六返回7。
事实:大多数应用程序假定周末=周六和周日。 AFAIK这是正确的所有国家使用公历。 覆盖所有其他日历的唯一可能性是每个日历/区域设置一个本地数据库并监视更改。 如果发生这种变化,则需要更新应用程序或者必须下载新的数据。
如果我们谈论的是工作日(不仅是周末),我们正在谈论的东西
- 没有明确的定义(公司之间的工作日变化)
- 没有规定(例如 – date格式,时区等有国际通用的规格)
- 经常因当地法律而改变(例如增加假期)
你需要的是让用户根据自己的国籍和雇主来设定你的个人需求。
你可以得到,如果一天是星期一到星期五,但据我所知,根据位置,没有像NSDate工作日这样的事情,例如firstWeekday,所以你需要自己实现它。
使用NSDateComponents
。
NSDate *date = [NSDate date]; NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:date]; NSLog(@"Weekday: %d", dateComponents.weekday);
这也将区分设备是否在周日或周一被认为是一周的第一天的领域。