4

我需要每“季度”重复一次事件(我认为这意味着大约提前 3 个月)。所以我可以期望这会移动日期(但它不会):

    NSDateComponents *component = [[NSDateComponents alloc] init]; // quarter
    component.quarter = 1;

    self.todoStartDate = [[NSCalendar currentCalendar] dateByAddingComponents: component toDate:self.todoStartDate options: 0];

在日期中添加“季度”有什么问题吗?添加一天或一周时效果很好,但不适用于“季度”。

4

2 回答 2

0

我遇到了同样的问题,不知道为什么这个季度不起作用,所以通过逐月替换 * 3 来解决。下面演示了如何让四分之三倒退:

        NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
        NSCalendar *theCalendar = [NSCalendar currentCalendar];

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"QQQ yyyy";
        NSDate *currentDate = [NSDate date];

        for (int i = -2; i <= 0; i++) {
            //dayComponent.quarter = i;
            dayComponent.month = i*3;

            NSDate *date = [theCalendar dateByAddingComponents:dayComponent toDate:currentDate options:0];

            NSString *dateString = [dateFormatter stringFromDate:date];

            NSLog(@"date = %@", dateString);
        }

我希望这一切都会有所帮助。

于 2013-06-18T09:38:23.153 回答
0

(我希望我可以将其添加为对 applefreak 答案的格式化评论,这是一个非常好的评论。但 SO 不允许在评论中添加标记。)

Apple 的 NSCalendar 文档说:

此 API 表示的某些日历可能必须将其基本单位概念映射到年/月/周/日/……命名法。例如,由一年中的 4 个季度而不是 12 个月组成的日历使用月份单位来表示季度。

现在,这可能更清楚了,但我认为Apple 的意思是普通日历根本没有“季度”。它们只有年、月(其中 12 个)和日。但是您可以子类NSCalendar化(或创建一个新的实例NSCalendar?),这样一年只有 4 个月,然后将这些月称为“季度”,并且为了这些子类的利益,Apple 已经预定义了该quarter属性。这非常令人困惑;我敢打赌,Apple 的 WTFery 背后有一个好故事。

无论如何,我同意 applefreak 的观点,即无论如何你都应该处理年/月/日的日期,而不是与神话中的“季度”混为一谈。毕竟,考虑到第三季度比第一季度短,“添加”(比方说)到 3 月 31 日的两个季度意味着什么?(答案是否取决于这是否是闰年?)

如果你真正想要的是“每年 1 月 1 日、4 月 1 日、7 月 1 日和 10 月 1 日重复发生的事件”,那么你应该写成. 更别提“加三个月”了,这和“加四分之一”有同样的问题。

顺便说一句,这里的其他人也注意到了quarterWTF。例如:我想在 NSDateComponents 类中获得四分之一的值

于 2012-09-10T22:54:35.283 回答