查找下周一的 NSDate [关闭]
Posted
技术标签:
【中文标题】查找下周一的 NSDate [关闭]【英文标题】:Find the NSDate for next Monday [closed] 【发布时间】:2013-08-11 11:25:50 【问题描述】:我想获取当前日期之后的下周一的日期。
所以如果今天的日期是 2013 年 8 月 9 日(星期五),那么我想得到 2013 年 8 月 12 日的日期。
我该怎么做?
【问题讨论】:
虽然这是一个简单的问题并且需要很少的努力,但日期在任何语言中都很烦人,所以我不明白为什么你应该被否决。 【参考方案1】:这段代码应该得到你想要的。它只是计算从星期一开始的天数,然后从当前日期追加。
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:now];
NSUInteger weekdayToday = [components weekday];
NSInteger daysToMonday = (9 - weekdayToday) % 7;
NSDate *nextMonday = [now dateByAddingTimeInterval:60*60*24*daysToMonday];
未经测试,但应该可以工作,并且无需担心更改日历的第一个日期。
而且它甚至可以轻松地添加到一周中的每隔一天,只需将9
inside (9 - weekdayToday) % 7;
更改为7 + weekDayYouWant
,记住那个星期天= 1,星期一 = 2...
【讨论】:
感谢卢卡斯,完美运行。只是一件事,如果今天是星期一,那么我想在下星期一而不是这个星期一显示。你能告诉我我怎样才能做到这一点吗?再次感谢 我不认为有一种优雅的方式可以在一天内改变这种行为。但是您可以添加(而不是替换)类似的东西,之前nextMonday
代码:daysToMonday = (daysToMonday == 0) ? 7 : daysToMonday;
。这样,当今天是星期一时,您将添加 7 天而不是 0 天。如果您为这种情况找到更好的解决方案,请告诉我
感谢您的快速回复,您的解决方案完美运行 :) 谢谢
不适用于夏令时。有关添加天数的修改解决方案,请参阅此***.com/questions/5067785/…
从 macOS 10.9 / ios 8 开始,推荐的方式是nextDayAfterDate:matchingComponents:options:
of NSCalendar
。可以考虑世界各地的夏令时变化,比86400
可靠得多。【参考方案2】:
您可以使用NSCalendar
方法dateFromComponents:
传递正确启动的NSDateComponents
对象
NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setWeekOfYear:[components weekOfYear] + 1];
[comps setWeekday:1];
[comps setYear:[components year]];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:2]; //This needs to be checked, which day is monday?
NSDate *date = [calendar dateFromComponents:comps];
类似的东西可以工作(盲打)
【讨论】:
假设星期从星期日开始(工作日 = 0),那么在星期天运行时,这段代码不会得到下周的星期一,而不是只得到下一天吗? 工作日单位是从 1 到 n 的数字,其中 n 是一周中的天数。例如,在公历中,n 为 7,星期日由 1 表示。所以是的,可能代码需要更改 我稍微编辑了代码以考虑到这一点。当然,还应该检查当前日期是否是一年中的最后一周,依此类推.. @Vik 它不起作用,但我喜欢这种方法。以上是关于查找下周一的 NSDate [关闭]的主要内容,如果未能解决你的问题,请参考以下文章