【问题标题】:How to get start and end dat for week number in objective c如何在目标c中获取周数的开始和结束日期
【发布时间】:2015-01-10 10:02:15
【问题描述】:

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

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

然后,所有Registration 对象都存储在WorkWeek 对象中,其中包含周数和注册数组。 WorkWeek 是根据周数构建的,从周一到周日运行。在这个WorkWeek 对象中,计算了总工作时间、加班时间和工资。

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

总结

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

如何根据周数获取一周的开始和结束日期?

【问题讨论】:

  • 什么样的一周没有有 7 天?我不明白这个问题?
  • 正如我的描述中所说,用户可以选择显示某个月份,例如一月。 1 月 1 日不是星期一,1 月 30 日也不是正好 4 周后的星期日。尽管如此,我的应用收到的所有注册仍将作为 WorkWeek 对象处理,以计算每周工作时间和工资。唯一的问题是,如果一个工作周没有 7 天,我就无法可靠地计算额外时间,因此需要知道我是有整周还是只有一部分。这是否澄清了我的问题?
  • 一个实际的例子是这个月:1 月 1 日是星期四,最后一天是四天后,星期日是第四天。收到的注册将在一个工作周内处理,但由于 WorkWeek 对象不包含 7 天,我无法可靠地计算额外工作时间和工资。我所需要的只是知道如何在给出周数时确定一周的第一天和最后一天。剩下的我自己能搞清楚
  • 你的意思是你想知道一周的第一天和最后一天是否在同一个月?
  • 没有。我所需要的只是一个函数/一段代码,当我传入一个 weeknumer(如第 1 周或第 40 周)时,它会返回该周的第一天和最后一天。我围绕它写的整个故事是为了提供一些背景。您知道如何实现这一目标吗?

标签: ios objective-c date nsdate


【解决方案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
  • dateByAddingUnit:... 方法在 OS X 10.9 或更高版本中可用。 或者,使用dateByAddingComponents:...
  • 我假设您使用公历,所以一周有 7 天。 或者,您可以先加上一周,然后再减去一天。

【讨论】:

  • 你显然没有我那么懒惰:)
  • @Abizern:这取决于:) 但我发现日历计算通常很有趣。在这种情况下,上面的代码给出了错误的结果,直到我添加了comp.weekday = cal.firstWeekday
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多