Ich bin derzeit eine alte iOS App zu aktualisieren, die NSDateComponents
das Startdatum der Woche eine gegebene NSDate
zur Berechnung verwendet, ist in:NSDateComponents: Wie veraltete NSWeekCalendarUnit zu Kalkulationswoche Startdatum ersetzen?
NSDate* someDate = [MyDateFactory dateFromDay:31 month:8 year:2017];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit) fromDate:someDate];
// For 2017-08-31 comps is now year=2017, week (obsolete)=35
comps.calendar = calendar;
NSDate* weekStartDate = [comps date];
// weekStartDate = 2017-08-27
Dies funktioniert gut, aber NSYearCalendarUnit
und NSWeekCalendarUnit
sind beide veraltet. Ersetzen NSYearCalendarUnit
durch die neue ist kein Problem. Aber was es richtig ersetzt für NSWeekCalendarUnit
.
Es scheint, dass NSWeekCalendarUnit
den gleichen Wert (die Woche des Jahres) wie die neue NSCalendarUnitWeekOfYear
zurückgibt. Aber dies führt nicht in den gleichen weekStartDate
:
// ... same as above. Now use new enum values
NSDateComponents *comps = [calendar components:(NSCalendarUnitYear | NSCalendarUnitWeekOfYear) fromDate:someDate];
// For 2017-08-31 comps is now year=2017, week of year=35 <== Same es above
comps.calendar = calendar;
NSDate* weekStartDate = [comps date];
// weekStartDate = 2017-01-01
So NSCalendarUnitWeekOfYear
kehrt die gleiche Woche Wert (Woche 35) verwendet wird, aber es scheint, dass dieser Wert nicht berücksichtigt wird, wenn das Datum aus dem dem NSDateComponents
Objekt Berechnung . 2017-01-01 ist offensichtlich nicht das Datum Woche 35 beginnt im Jahr 2017.
Also, wie das zu lösen?