有没有人知道是否有办法在NSCalendar上设置一周的第一天,或者是否有一个日历已经将星期一作为一周的第一天而不是星期日 . 我目前正在开发一款基于一周工作量的应用程序,它需要在星期一而不是星期天开始 . 我很可能会做一些工作来解决这个问题,但会有很多极端情况 . 我更喜欢平台为我做这件事 .
提前致谢
这是我正在使用的一些代码 . 现在是星期六,所以我希望工作日是6而不是7,这意味着星期日将是7而不是0到0
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setFirstWeekday:0];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit;
NSDateComponents *todaysDate = [gregorian components:unitFlags fromDate:[NSDate date]];
int dayOfWeek = todaysDate.weekday;
16 回答
我看到其他消息中的误解 . 第一个工作日,以它为准,数字1不为0.默认星期日= 1,如“可可日期和时间编程指南简介:日历计算”:
对于星期一作为第一个工作日,我唯一的补救措施是强力条件来修复计算
Edit: 这不会检查上周开始的前一个月的边缘情况 . 一些更新的代码来涵盖这个:https://stackoverflow.com/a/14688780/308315
如果有人仍然关注这个,你需要使用
并将firstWeekday设为2.(1 == Sunday和7 == Saturday)
这是代码:
请记住,工作日的序数从一周的第一天开始为1,而不是零 .
Documentation link .
此代码构造一个设置为当前周的星期一的日期:
_C43066_在NSCalendar对象上 . 设置接收器的第一个工作日的索引 .
应该做的伎俩 .
在我看来,根据用户区域设置,此设置应该是动态的 . 因此,应该使用:
这将导致日历根据用户区域设置自动设置第一周工作日 . 除非您为特定目的/用户区域设置开发应用程序(或者更愿意让用户选择这一天) .
我在这里遇到了很多问题 . . 也许只是我 . .
这是一个适合我的答案:
Update:
正如@vikingosegundo指出的那样(elsewhere),一般来说最好让当地人确定哪一天是本周的开始,但是在这种情况下,OP要求本周的开始时间在周一发生,因此我们复制系统日历,并覆盖firstWeekDay .
Kris回答的问题是本周初在上个月开始的边缘情况 . 这是一些更简单的代码,它还检查边缘情况:
我这样做了 .
下面还介绍了边缘情况,
试试这个:
我找到了使用nscalender显示任何工作日名称的方法..使用以下代码..只需从xcode菜单栏打开控制台即可查看结果 . 复制在viewDidLoad方法中粘贴以下代码以获取一周的第一天
输出将是:
因为我在2010年11月2日运行了这个程序,你将根据当前日期获得所需的输出 .
同样,如果你想获得一周的第一个工作日,即星期一的日期,那么只需修改一下代码:
更改:
[components setDay:([components day]-([components weekday]-1))];
至
[components setDay:([components day]-([components weekday]-2))];
获得星期一的那个星期的日期..
类似地,你可以通过改变整数-1,-2等来尝试找到七个工作日中任何一个的日期......
希望你的问题得到解答..
谢谢,Bonson Dias
我这样做的简单方法是让星期一= 0,星期日= 6:
默认情况下,ISO 8601日历似乎将其第一个工作日设置为星期一 .
使用日历nextWeekend(iOS 10或更高版本)和ordinality(感谢@ kris-markel) . 我已经在周一获得了en_US日历的第一周 .
这是一个回退到firstWeekday的例子:
您只需更改日历的
.firstWeekday
即可 .然后使用
rangeOfUnit:startDate:interval:forDate:
获取第一天Someday, there will be.