2

毎週のカレンダー ビューを作成しています。その一部は、表示された週の最初の日を計算しています。また、保存された日付に最初の 1 秒の時刻を含めたいので、日付の hh:mm:ss がすべて 00:00:00 であることを確認しようとしています。

私は次のコードを持っています。これはほとんどの場合正常に動作しますが、日付が年の初めまたは終わりにある場合、一見ランダムな結果が得られます。

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *comps = [gregorian components:unitFlags fromDate:self.selectedDate];
NSDateComponents *addcomps = [[NSDateComponents alloc] init];
[addcomps setDay:1-[comps weekday]];

NSDate *fixedDate = [appDelegate.gregorian dateByAddingComponents:addcomps toDate:self.selectedDate options:0];
////FIXED DATE IS NOW FIRST DAY OF DISPLAYED WEEK

comps = [appDelegate.gregorian components:unitFlags fromDate:fixedDate]; ///fixedDate = 2010-01-03 02:51:25 -0600
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
self.savedBeginningDate = [appDelegate.gregorian dateFromComponents:comps]; ///self.savedBeginningDate = 2011-01-09 00:00:00 -0600

hh:mm:ss を 00:00:00 に設定すると、日付が 2010 年 1 月 3 日から 2009 年 1 月 11 日に変更されます。

これらの行にコメントとして dateFromComponents の結果を追加しました。この奇妙な動作は、その年の前後にのみ発生するようで、私が見た他の週には発生しません。

助けてくれてありがとう!

4

1 に答える 1

1

私はこれを理解しました: NSWeekCalendarUnitunitFlags から を取り出す必要がありました。理由はわかりませんが、何らかの理由で日付が正しく計算されていませんでした!

于 2010-11-12T00:39:01.720 に答える