Base De Données Prédicat De Comparaison De Dates
Im essayant de récupérer tous les objets dans une entité correspondant à un utilisateur selectedDate (c'est un NSDate).
La Base de Données de code c'est bien, mais mon prédicat retourne 0 résultats, les dates sont les mêmes dans la base de données que l'utilisateur choisit.
Comment le selectedDate être comparé à une date à partir d'une entité à l'aide d'un prédicat?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(eDate = %@)", selectedDate];
OriginalL'auteur user2228755 | 2013-04-05
Vous devez vous connecter pour publier un commentaire.
Votre prédicat semble être fine.
La raison pour laquelle vous êtes de trouver un zéro sont retournés, cependant, peut être que les dates ne sont pas tout à fait la même.
Par exemple:
05/04/2012 13:37:00
ne correspondra pas à05/04/2012 13:37:01
que ces deux valeurs ne sont pas exactement les mêmes.Voulez-vous de vérifier la date (jour, mois, année) ainsi que le temps?
Si vous voulez seulement vérifier la date, vous devez créer une date de début et une date de fin et de les comparer à l'aide de l'utilisateur de la date sélectionnée en tant que cadre de référence.
Quelque chose de semblable à ce qui devrait créer une date et une heure pour 00:00:00.
Créer une autre date, les heures, les minutes et les secondes à 23:59:59 et vérifiez que votre utilisateur a sélectionné date se situe entre ces plages.
pourquoi ajoutez-vous
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
danscomponents:fromDate:
juste pour le jeter au loin?Mon mauvais. C'était le code que j'ai collé à partir d'un projet qui fait appel à ces composants. J'ai oublié de les enlever pour les fins de ce poste. Je vais modifier que maintenant ;] Merci pour le tuyau!
les 3 prochaines lignes ne devrait pas être nécessaire de trop
J'ai quitté les lignes suivantes dans pour illustrer l'OP comment régler l'heure de composants pour
23:59:59
. Hésitez pas à en bas de vote de la réponse si vous vous sentez qu'il n'est pas à zéro ;]OriginalL'auteur CaptainRedmuff
Tandis que dans la communication humaine date est souvent égale à jour, ce n'est pas la même chose avec NSDate objets: Un NSDate représente un moment précis dans le temps. Les Dates sont différentes en quelques secondes seulement ne sont pas égaux. Et effectivement, ils ne représentent jours, mois, année à tous, comme cela est différent du système de calendrier de calendrier de système de
vous devez définir pour vous-même si des dates dans la même minute, heure, jour ... sont égaux. Donc, fondamentalement, vous devez enseigner le programme pour permettre à certains flou de bougé.
ici pour minute résolution
Pour les dates, le même jour (au courant de fuseaux horaires et l'heure d'été à Temps) vous avez juste serait de changer cela:
À mon avis, c'est beaucoup mieux que la accepté de répondre, car il représente pour les différents calendriers et de ne pas coder en dur le jour de début et de fin.
OriginalL'auteur vikingosegundo
Je peux mettre au travail avec quelques modifications pour la accepté de répondre et l'utilisation de l'iOS 8 API pour créer des dates avec le décalage de l'heure. Le code:
Espère que cela aide quelqu'un
OriginalL'auteur halbano
J'ai récemment passé un certain temps à tenter de résoudre ce même problème et l'ont résolu la suite, maintenant mis à jour pour iOS 8 et ci-dessus...
...et la
NSPredicate
pour la Base de DonnéesNSFetchRequest
(comme déjà indiqué ci-dessus dans les autres réponses)...OriginalL'auteur andrewbuilder