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

(これをapplefreakの回答にフォーマットされたコメントとして追加できればいいのにと思いますが、これはかなり良いものです。しかし、SOはコメントでのマークアップを許可していません。)

NSCalendar に関する Apple のドキュメントには、次のように書かれています。

この API で表される一部のカレンダーは、基本単位の概念を年/月/週/日/… という命名法にマッピングする必要がある場合があります。たとえば、1 年が 12 か月ではなく 4 つの四半期で構成されるカレンダーは、月単位を使用して四半期を表します。

さて、これはもっと明確かもしれませんが、Apple が言っていることは、通常のカレンダーには「四半期」がまったくないということだと思います。年、月 (12 個)、および日しかありません。ただし、年が 4 か月しかないようにサブクラス化NSCalendar(または ? の新しいインスタンスを作成) し、それらの月を「四半期」と呼び、そのようなサブクラスのために Apple がプロパティを事前に定義しておくことができます。これはひどく紛らわしいです。Apple の WTFery の背後には良い話があるに違いない。NSCalendarquarter

とにかく、神話上の「四半期」をいじるのではなく、とにかく年/月/日の日付を扱うべきだというapplefreakに同意します。結局のところ、第 3 四半期が第 1 四半期よりも短いことを考えると、3 月 31 日に 2 四半期を「追加」することは何を意味するのでしょうか? (答えは、今年がうるう年かどうかによって異なりますか?)

あなたが本当に望むものが「毎年1月1日、4月1日、7月1日、10月1日に繰り返されるイベント」であれば、それを書くべきです. 「四半期を1つ足す」のと同じ問題がある「3か月を足す」ことさえ気にしないでください。

ところで、ここにいる他の人もquarterWTF に気づいています。例: NSDateComponents クラスで四半期の値を取得したい

于 2012-09-10T22:54:35.283 に答える