2

だから私はこの週の日付範囲を取得しようとします。

現在の日付コンポーネント (年と日付のみ) を取得すると、これらの値は次のようになります。

ここに画像の説明を入力

週の近くに「Obsolescent」と書かれていることに気付きました。Apple ドキュメントを検索してみましたが、これについては何も見つかりませんでした。

次に、現在のカレンダー (またはグレゴリオ暦、同じ値) で NSDate を取得しようとしますが、取得する値は次のとおりです。

ここに画像の説明を入力

そのため、週は無視されました。だから私は私のコンポーネントに数ヶ月と1週間を追加し、そのようなコンポーネントを持っていました:

ここに画像の説明を入力

それから私はこれから私の日付を取得しようとしました、これは私が得たものです:

ここに画像の説明を入力

ここでは明らかに週のコンポーネントが無視されています。どうしてこんなことに?非推奨ですか?それとも何かのバグですか?

4

3 に答える 3

2

だから私は最終的に解決策を見つけました。

平日を設定するだけで、すべてが解決する(機能し始める)ようです。

[startDate setWeekday:1];

その後、日付と週が正しく返されます。

曜日を設定せずに週のコンポーネントが無視される場合、それがまだバグであるかどうかはわかりません。

于 2013-06-24T13:29:30.000 に答える
1

週の開始終了日を計算するには、次のrangeOfUnit:startDate:interval:forDate:メソッドNSCalendarが非常に便利です。

NSDate *now = [NSDate date];

NSDate *startOfWeek;
NSTimeInterval length;
[[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit
                                startDate:&startOfWeek
                                 interval:&length
                                  forDate:now];
NSDate *endOfWeek = [startOfWeek dateByAddingTimeInterval:length];
NSLog(@"%@", startOfWeek);
NSLog(@"%@", endOfWeek);

1 週間前の同じ日付を計算するには、次を使用しますdateByAddingComponents

NSDate *now = [NSDate date];
NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setWeek:-1]; // One week back in time
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:now options:0];
NSLog(@"%@", now);
NSLog(@"%@", date);
于 2013-05-21T17:10:55.267 に答える