如何获得目标c中的周数的开始和结束日期

时间:2015-01-10 10:02:16

标签: ios objective-c date nsdate

在我的iOS应用中,我有一个星期编号,我需要获取该周编号的开始和结束日期。

我正在构建一个应用程序,公司经理可以使用该应用程序跟踪员工的工作时间。这些工时是每天在自定义Registration对象中处理的。 在此对象中,存储日期,开始时间,结束时间和休息时间,并根据这些值计算工作时间。

然后,所有Registration个对象都存储在WorkWeek对象中,其中包含周数和注册数组。 WorkWeek是基于周数构建的,从星期一到星期日。在此WorkWeek对象中,计算总工时,额外工时和工资。

现在显然,如果Workweek不是从星期一到星期五的整整一周,我就无法可靠地计算额外的小时数。当用户选择从我的数据库中获取mont的所有注册时,尤其会发生这种情况。一个月不会在星期一开始,也不会在四周后的星期日结束,所以我正在处理不可靠的周对象。

结束

为了确保我在我的应用程序中显示的信息是可靠的,我需要确定某个星期(如第1周或第52周)是否包含至少7天,如果不是,我需要将bool设置为FALSE然后触发我的用户通知。

如何根据一个周岁的人来获取一周的开始和结束日期?

1 个答案:

答案 0 :(得分:1)

这说明了如何做到这一点:

NSCalendar *cal = [NSCalendar currentCalendar];

// Start of week:
NSDateComponents *comp = [[NSDateComponents alloc] init];
comp.weekday = cal.firstWeekday;
comp.weekOfYear = 1; // <-- fill in your week number here
comp.year = 2015;    // <-- fill in your year here
NSDate *startOfWeek = [cal dateFromComponents:comp];

// Add 6 days:
NSDate *endOfWeek = [cal dateByAddingUnit:NSCalendarUnitDay value:6 toDate:startOfWeek options:0];

// Show results:
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateStyle = NSDateFormatterShortStyle;
NSLog(@"%@", [fmt stringFromDate:startOfWeek]);
NSLog(@"%@", [fmt stringFromDate:endOfWeek]);

一些注意事项:

  • cal.firstWeekday给出第一个工作日的语言环境相关索引,例如 德国2 = Monday,美国1 = Sunday根据您的需要, 你也可以在这里使用一个常数值。
  • 可能需要设置cal.minimumDaysInFirstWeek,比较 NSDateFormatter reports June 2, 2013 as being in week zero
  • OS X 10.9或更高版本中提供了dateByAddingUnit:...方法。 或者,使用dateByAddingComponents:...
  • 我假设你使用公历,所以一周有7天。 或者,您可以添加一周,然后减去一天。