【发布时间】:2012-11-02 11:01:46
【问题描述】:
给定一个参考日期,我需要找到下面的“星期三”。
要明确一点,如果参考日期是星期二,那么它应该返回 同一周的星期三。
如果参考日期是星期三或更晚,则需要从下一个周返回下一个星期三。
重要的是它不会返回参考日期之后的星期三。
我一直在考虑使用 NSDateComponents,但不知道如何获得一周中的第二天,它必须总是在未来。
这是我目前所拥有的:
NSDate *referenceDate = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:referenceDate];
[dateComponents setWeekday:4]; // Wednesday
NSDate *followingWednesday = [calendar dateFromComponents:dateComponents];
虽然这段代码没有区分同一周过去的星期三或下一个星期三,但我的问题是谎言。
我知道我可以生成两个日期,一个来自本周,一个来自下周,然后使用 if 语句检查哪个是未来,但这似乎需要很多代码来做一件简单的事情。
有没有更好的办法?
任何帮助将不胜感激。
更新
似乎设置工作日实际上并不影响NSCalendar的dateComponents:方法返回的日期。无论工作日设置什么,我上面的示例代码都会返回相同的日期。
所以现在我更难过了。
【问题讨论】:
-
如果日期是过去的,加 7 天怎么样,否则不要管它?
-
是的,这基本上就是我正在做的事情,但我很想知道他们是否是一种更好的方式来表达“下周三找我”,而无需编写大量额外的逻辑。我希望关于 NSDateComponents 类有一些我错过的东西。可能没有,那很好,我会按照我现在的方式去做。
标签: objective-c ios date nsdate nsdatecomponents