Objective-C Language
NSDate
Recherche…
Remarques
NSDate est un type de valeur très simple, représentant un moment exact du temps universel. Il ne contient pas d'informations sur les fuseaux horaires, l'heure d'été, les calendriers ou les paramètres régionaux.
NSDate est vraiment un wrapper immuable autour d'un NSTimeInterval qui est un double . Il n'y a pas de sous-classe mutable, comme avec d'autres types de valeurs dans Foundation.
Créer un NSDate
La classe NSDate fournit des méthodes pour créer des objets NSDate correspondant à une date et une heure données. Un NSDate peut être initialisé à l'aide de l'initialiseur désigné, qui:
Retourne un objet
NSDateinitialisé par rapport à 00:00:00 UTC le 1er janvier 2001 d'un nombre de secondes donné.
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];
NSDate fournit également un moyen simple de créer un NSDate égal à la date et à l'heure actuelles:
NSDate *now = [NSDate date];
Il est également possible de créer un NSDate un nombre de secondes donné à partir de la date et de l'heure actuelles:
NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];
Comparaison de date
Il y a 4 méthodes pour comparer NSDate dans Objective-C:
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate -
- (NSDate *)earlierDate:(NSDate *)anotherDate -
- (NSDate *)laterDate:(NSDate *)anotherDate -
- (NSComparisonResult)compare:(NSDate *)anotherDate
Considérez l'exemple suivant en utilisant 2 dates, NSDate date1 = July 7, 2016 et NSDate date2 = July 2, 2016 :
NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;
NSDateComponents *comps2 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 2;
NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016
Maintenant que les NSDate sont créés, ils peuvent être comparés:
if ([date1 isEqualToDate:date2]) {
//Here it returns false, as both dates are not equal
}
Nous pouvons également utiliser les earlierDate: et laterDate: de la classe NSDate :
NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.
Enfin, nous pouvons utiliser la NSDate compare: :
NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
//Fails
//Comes here if date1 is earlier than date2. In our case it will not come here.
}else if (result == NSOrderedSame){
//Fails
//Comes here if date1 is the same as date2. In our case it will not come here.
}else{//NSOrderedDescending
//Succeeds
//Comes here if date1 is later than date2. In our case it will come here
}
Convertir NSDate composé d'heures et de minutes (uniquement) en un NSDate complet
Il y a beaucoup de cas où l'on a créé un NSDate à partir d'un format heure et minute, à savoir: 08:12
L'inconvénient de cette situation est que votre NSDate est presque complètement "nu" et que vous devez créer: jour, mois, année, seconde et fuseau horaire pour que cet objet "joue" avec d'autres types de NSDate.
Pour l'exemple, supposons que hourAndMinute est le type NSDate composé du format heure et minute:
NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];
NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];
Maintenant, votre objet est le contraire total d'être "nu".
Conversion de NSDate en NSString
Si ww a un objet NSDate, et que nous voulons le convertir en NSString. Il existe différents types de chaînes de dates. Comment pouvons-nous faire cela? C'est très simple. Juste 3 étapes.
- Créer un objet NSDateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- Définissez le format de date dans lequel vous souhaitez que votre chaîne.
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
Maintenant, obtenez la chaîne formatée
NSDate *date = [NSDate date]; // your NSDate object NSString *dateString = [dateFormatter stringFromDate:date];
Cela donnera quelque chose comme ceci: 2001-01-02 at 13:00
Remarque:
La création d'une instance NSDateFormatter est une opération coûteuse. Il est donc recommandé de la créer une fois et de la réutiliser si possible.