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.

  1. Créer un objet NSDateFormatter
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. Définissez le format de date dans lequel vous souhaitez que votre chaîne.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. 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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow