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
NSDate
initialisé 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.