gpt4 book ai didi

ios - 获取第一个和最后一个工作日。一年中第一周和最后几周的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 22:20:02 26 4
gpt4 key购买 nike

我想获取给定年份的给定周(数字)的第一天和最后一天。我编写的函数在一年的最后一周和第一周除外。

例如,如果我要求 weekday 1week 1 的 7 year 2014 我得到了 2015 年的第一周!!!

2014-12-28 // weekday 1
2015-01-03 // weekday 7

但是正确的结果应该是!

2013-12-29 // weekday 1  
2014-01-04 // weekday 7

如果我要求 2013 年第 51 周,我会正确收到:

2013-12-15 // weekday 1
2013-12-21 // weekday 7

这是我的函数,我该如何解决这个奇怪的行为?!

// Return the date which is the weekday for a given week number and year
+ (NSDate*)weekDay:(NSInteger)weekday forWeekOfYear:(NSInteger)week year:(NSInteger)year{

// Date component
NSDateComponents *comp = [[NSDateComponents alloc]init];
[comp setWeekOfYear:week];
[comp setWeekday:weekday];
[comp setYear:year];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:comp];

NSLog(@"week %d year %d weekday %d\n%@", week, year, weekday, date);
return date;
}

编辑 --------------

按照@Guillaume 的回答,我使用setWeekOfYear 而不是setYear 修改了我的代码。它部分起作用,我正确地得到了一周的最后一天,但作为第一个工作日,我得到了下周的第一天。现在我在任何周数都收到此错误,而不仅仅是一年的第一周或最后一周。

这是 2014 年第 1 周的新结果:

2014-01-05 // weekday1... it should be 2013-12-29. damn!
2014-01-04 // weekday7... it should be 2014-01-04. great!

正如信息一样,我使用以下代码调用我的类别函数:

self.fromDate = [NSDate weekDay:1 forWeekOfYear:self.selectedWeek year:self.selectedYear];
self.toDate = [NSDate weekDay:7 forWeekOfYear:self.selectedWeek year:self.selectedYear];

最佳答案

您是否尝试使用 setYearForWeekOfYear: 而不是 setYear:

NSCalendar 中还有一个属性 minimumDaysInFirstWeek 可能值得一看...

关于ios - 获取第一个和最后一个工作日。一年中第一周和最后几周的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20655453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com