Ich schreibe eine App, die Core-Daten verwendet, um meine Daten zu speichern. Darin enthalten ist ein Datumsfeld, von dem ich nur das Datum und nicht die Uhrzeit interessiert bin. Ich brauche Datensätze auszuwählen, basierend auf dem Datum (keine Zeit) und so habe ich eine Kategorie NSDate erstellt Zeit, um ein Datum zurückzubringen, normiert auf einen Satz wie folgt:NSDate Best Practice beim Erstellen eines Datums ohne Zeitelement
+ (NSDate *)dateWithNoTime:(NSDate *)dateTime {
if(dateTime == nil) {
dateTime = [NSDate date];
}
NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:dateTime];
NSDate *dateOnly = [[NSCalendar currentCalendar] dateFromComponents:comps];
[dateOnly dateByAddingTimeInterval:(60.0 * 60.0 * 12.0)]; // Push to Middle of day.
return dateOnly;
}
ich dann Verwenden Sie das, wenn ich dem Core-Datenspeicher Daten hinzufüge (ich habe einen Setter, der diese Methode verwendet, um den primitiven Datumswert festzulegen) und dann verwende ich diese Methode, um ein Datum zu erstellen, mit dem ich die Daten beim Ausführen einer Abrufanforderung vergleiche . In der Theorie sollte das immer funktionieren - also die Daten heraussuchen, nach denen ich suche.
Ich bin etwas nervös, aber ich bin mir nicht ganz sicher, welchen Effekt das Ändern der Zeitzone oder des Gebiets hat. Wird es noch funktionieren?
Was gilt als Best Practice beim Speichern und Suchen eines Datums nur, wenn Sie nicht an der Uhrzeit interessiert sind.
Prost.
EDIT
Nach der Diskussion Lesen empfohlen Ich denke, dass ich meinen Code wie folgt ändern sollte. Der Gedanke ist, dass, wenn ich sicherstelle, dass ich es an ein bestimmtes Kalendersystem und eine bestimmte Zeitzone (UTC) verschiebe, die Daten immer gleich sein sollten, egal wo du bist, wenn du das Datum einstellst und das Datum liest. Alle Kommentare zu diesem neuen Code werden geschätzt.
+ (NSDate *)dateWithNoTime:(NSDate *)dateTime {
if(dateTime == nil) {
dateTime = [NSDate date];
}
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:dateTime];
NSDate *dateOnly = [calendar dateFromComponents:components];
[dateOnly dateByAddingTimeInterval:(60.0 * 60.0 * 12.0)]; // Push to Middle of day.
return dateOnly;
}
Danke für die Lösung !! : D Nur eine kleine Korrektur: Die Linie: '[dateOnly dateByAddingTimeInterval: (60,0 * 60,0 * 12,0)];' Sollte sein: 'dateOnly = [dateOnly dateByAddingTimeInterval: (60,0 * 60,0 * 12,0)];' –