0

我正在寻找一种简单但有效的 Objective-C 算法,该算法从一年的给定季度(3 个月)开始,添加或减去特定数量的季度。

例如,在 2012 年第一季度加上 10 个季度,我得到年份:2012 + Floor(10 / 4) = 2012 + 2 = 2014,那么季度:1 + Mod (10, 4) = 1 + 2 = Q3。从 2011 年第三季度减去 2 个季度,我想以 2011 年第一季度结束。

完成此任务的最优雅的代码是什么?

4

2 回答 2

3

从这里更改的代码:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1

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];
于 2012-04-06T18:38:38.860 回答
1
- (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
于 2012-04-06T19:17:23.800 回答