NSDateComponentsは奇妙な結果をもたらします
-
30-09-2019 - |
質問
私は毎週のカレンダービューを作成していますが、その一部は表示された週の最初の日を計算することです。また、節約された日付が最初の秒の時間を持っていることを望んでいるので、日付のHH:MM:SSがすべて00:00:00であることを確認しようとしています。
私は次のコードを持っていますが、ほとんどの場合は正常に機能しますが、日付が1年の始まりまたは終わりにあるときに一見ランダムな結果をもたらします。
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日までの日付が変更されます。
それらの行に関するコメントとして、componentsからの日付の結果を追加しました。この奇妙な動作は、年ごとにマークが付いている場合にのみ発生しているようで、私が見た他の週には起こりません。
助けてくれてありがとう!
解決
私はこれを理解しました:私は NSWeekCalendarUnit
ユニットフラッグから。理由はありませんが、何らかの理由でそこにある理由は、日付が間違って計算されていました!
所属していません StackOverflow