Fondamentalement, je veux savoir si c'est le lendemain. Donc, je stocke la date actuelle (par exemple 2 janvier) constamment dans une plis. Mais la prochaine fois que l'utilisateur ouvre la demande, si la date a changé (par exemple, 3 janvier), je veux faire quelque chose. Notez qu'un contrôle d'ordre croissant simple ne fonctionnerait pas car je ne veux pas savoir si une date est plus tard qu'une autre date, si la différence n'est que dans les heures. J'ai besoin de pouvoir différencier les 2 11:50 et le 3 janvier 2:34 mais pas les 3 2:34 et 3 5:12. P>
4 Réponses :
J'utilise ce qui suit que j'ai trouvé ainsi:
La réponse originale contient du code obsolète, Exchange: UnitFlags non signé = NSYARCALENDARUNIT | Nsmonthcalendarunit | Nsdaycalendarunit; à ceci: Unité non signéeFLAGS = NSCALENDARUNITEAR | Nscalendarunitmonth | Nscalendaruniteday;
Mis à jour le post. Merci!
Utilisez NSCalendardate au lieu de NSDate et comparez ce qu'ils reviennent de -dayofcommonera code>
Euh, oui c'est développeur.apple.com / Mac / Bibliothèque / Documentation / Cocoa / Conceptu Al / ... Les déprécis ne sont pas les mêmes que supprimés. En outre, la question ne consiste pas à vérifier l'équivalence de deux dates, mais comment dire si elles sont à différents jours.
J'ai vérifié les documents en Xcode (je cours v 3.2.1), et ce que je vois là indique "il n'est pas encore obsolète, mais il peut être dans la prochaine version du système d'exploitation après Mac OS X V10.5." On dirait que les documents des packages Xcode ne sont pas à jour. En tout cas, mon code ci-dessus est toujours correct. Notez que je comparais la valeur de retour de dayofcommonera.
Indépendamment de la question de savoir s'il est considéré comme obsolète, NSCalendardate a un gros problème technique: il ne gère que le calendrier grégorien. NSCalendar est bien mieux équipé, disponible sur iPhone et n'a aucun avertissement d'amortissement (imminent ou autre).
Avez-vous déjà eu votre carrière nécessaire pour utiliser n'importe quel calendrier autre que le grégorien? Même si vous avez, la question de savoir comment vérifier si deux dates tombent le même jour ou non, ce qui ne dépend pas du calendrier que vous utilisez.
regarder le Guide de programmation Date Time vous donne un exemple de calcul de la différence entre deux dates que par composant: Par exemple:
NSDate *startDate = ...;
NSDate *endDate = ...;
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:startDate
toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
Ma version basée sur NEILS '(AVERTISSEMENT: UNTESTÉE):
Le mien est plus similaire à - (NscomparisonResult) Comparer: code> sur nsdate. Pour vérifier que les jours étant égaux, do [MyDate ParcheMailMontHandYear: AutreDate] == Nsordedsame Code> P> - (NSComparisonResult)compareDayMonthAndYear:(NSDate *)date
{
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *selfComponents = [calendar components:unitFlags fromDate:self];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
BOOL dayIsEqual = (selfComponents.day == dateComponents.day && selfComponents.month == dateComponents.month && selfComponents.year == dateComponents.year);
if (dayIsEqual) {
return NSOrderedSame;
}
return [self compare:date];
}