Frage

Ich habe Probleme beim Hinzufügen von Werten zu Daten und auch Unterschiede zwischen den Daten. Die berechneten Daten und Komponenten sind falsch.

Wenn ich also 1,5 Monate hinzufüge, bekomme ich nur 1 Monat, wenn ich jedoch eine ganze Zahl hinzufüge, dh (1 oder 2 oder 3 und usw.), berechnet es korrekt.

Float32 addAmount = 1.5;

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setMonth:addAmount];

NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 [gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

 NSDate *newDate2 = [gregorian dateByAddingComponents:components toDate:Date1 options:0];

Wenn ich nun ein Datum habe, das mit genau einem Jahr hinzugefügt wurde (fast der gleiche Code wie oben), fügt es korrekt hinzu, aber wenn der Unterschied berechnet wird, bekomme ich 0 Jahre, 11 Monate und 30 Tage.

NSDate *startDate = Date1;
NSDate *endDate = Date2;

NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;

NSDateComponents *components = [gregorian components:unitFlags
              fromDate:startDate
                toDate:endDate options:0];

NSInteger years = [components year];
NSInteger months = [components month];
NSInteger days = [components day];

Was mache ich falsch? Außerdem habe ich die kcfcalendarcomponentswrap -Konstankt in die Optionen für Hinzufügen und Differenzfunktionen hinzugefügt, aber ohne Unterschied.

Vielen Dank

War es hilfreich?

Lösung

Wenn ich also 1,5 Monate hinzufüge, bekomme ich nur 1 Monat, wenn ich jedoch eine ganze Zahl hinzufüge, dh (1 oder 2 oder 3 und usw.), berechnet es korrekt.

Das setMonth: Methode in NSDateComponents nimmt an NSInteger, keine schwebende Punktzahl. Das Verhalten ist also korrekt, da es einfach die 1,5 bis 1 abschneidet.

Wenn ich nun ein Datum habe, das mit genau einem Jahr hinzugefügt wurde (fast der gleiche Code wie oben), fügt es korrekt hinzu, aber wenn der Unterschied berechnet wird, bekomme ich 0 Jahre, 11 Monate und 30 Tage.

Wenn Sie den Code nicht für die Erstellung Ihres Datums1- und Datums2 -Variablen anzeigen, gibt es keine wirkliche Möglichkeit zu sagen.

(Sie veröffentlichen auch den Speicher oben; stimmen immer mit einem Alloc überein release/autorelease. Und versuchen Sie, Ihren Variablen nicht Großbuchstaben zu geben, da dies nur für Klassennamen getan werden sollte.

Andere Tipps

Ich fand schließlich das Problem mit dem Datumsunterschied, als ich es in einem DB gespeichert habe, verwendete ich TimeIntervalsince1970 mit einem Doppelwert, aber als ich es fülle und auf einen DatePicker einstellte, verwendete ich einen Int -Spalten -Typ.

Danke Shaggy Frog, dass du mich in die richtige Richtung lenkte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top