J'écris une application qui utilise des données de base pour stocker mes données. Inclus dans ceci est un champ de date dont je suis seulement intéressé par la date pas l'heure. je dois sélectionner les enregistrements en fonction de la date (pas le temps) et j'ai donc créé une catégorie sur NSDate pour retourner une date, normalisée à un temps de jeu comme suit:NSDate bonne pratique dans la création d'une date sans élément de temps
+ (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;
}
Je puis utilisez ceci quand j'ajoute des données au core-data store (j'ai un setter qui utilise cette méthode pour définir la valeur de la date primitive) puis j'utilise cette méthode pour créer une date que j'utilise pour comparer les dates lors d'une requête d'extraction . Donc, en théorie, cela devrait toujours fonctionner - c.-à-choisir les dates que je cherche. Je suis un peu nerveux mais je ne suis pas tout à fait sûr de l'effet que cela aura sur le changement de fuseau horaire ou de paramètres régionaux. Cela fonctionnera-t-il encore?
Ce qui est considéré comme la meilleure pratique lorsque vous stockez et recherchez une date uniquement lorsque vous n'êtes pas intéressé par l'heure.
Cheers.
EDIT
Après avoir lu la discussion, je pense recommandé que je modifier mon code pour la suivante. L'idée étant que si je m'assure que je le pousse vers un système de calendrier spécifique et un fuseau horaire spécifique (UTC) alors les dates devraient toujours être les mêmes, peu importe où vous êtes lorsque vous définissez la date et quand vous lisez la date. Tous les commentaires sur ce nouveau code apprécié.
+ (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;
}
Merci pour la solution !! : D Juste une petite correction: La ligne: '[DATEONLY dateByAddingTimeInterval: (60,0 * 60,0 * 12,0)];' devrait être: 'DATEONLY = [DATEONLY dateByAddingTimeInterval: (60,0 * 60,0 * 12,0)];' –