我正在寻找一种简单但有效的 Objective-C 算法,该算法从一年的给定季度(3 个月)开始,添加或减去特定数量的季度。
例如,在 2012 年第一季度加上 10 个季度,我得到年份:2012 + Floor(10 / 4) = 2012 + 2 = 2014,那么季度:1 + Mod (10, 4) = 1 + 2 = Q3。从 2011 年第三季度减去 2 个季度,我想以 2011 年第一季度结束。
完成此任务的最优雅的代码是什么?
我正在寻找一种简单但有效的 Objective-C 算法,该算法从一年的给定季度(3 个月)开始,添加或减去特定数量的季度。
例如,在 2012 年第一季度加上 10 个季度,我得到年份:2012 + Floor(10 / 4) = 2012 + 2 = 2014,那么季度:1 + Mod (10, 4) = 1 + 2 = Q3。从 2011 年第三季度减去 2 个季度,我想以 2011 年第一季度结束。
完成此任务的最优雅的代码是什么?
从这里更改的代码:
NSDate *today = [[NSDate alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setMonth:3]; // one quarter
NSDate *oneQuarterFromToday = [gregorian dateByAddingComponents:offsetComponents
toDate:today options:0];
- (void)addQuarters:(NSInteger)quarters toYear:(NSInteger *)currentYear andQuarter:(NSInteger *)currentQuarter {
if (*currentYear < 0 ||
*currentQuarter < 1 ||
*currentQuarter > 4) {
return;
}
*currentYear += quarters / 4;
*currentQuarter += quarters % 4;
if (*currentQuarter > 4) {
*currentQuarter -= 4;
*currentYear += 1;
} else if (*currentQuarter < 1) {
*currentQuarter += 4;
*currentYear -= 1;
}
}
// Example of use:
NSInteger year = 2012;
NSInteger quarter = 2;
[self addQuarters:-7 toYear:&year andQuarter:&quarter];
NSLog(@"Quarter %i of %i", quarter, year);
// Output: Quarter 3 of 2010