58 votes

Comment puis-je obtenir la date du jour dans le Cacao

Je suis arriver a commencé à développer pour l'iPhone et à ce titre je suis à la recherche à différents tutoriels en ligne ainsi que d'essayer quelques différentes choses moi-même. Actuellement, je suis en train de créer un compte à rebours jusqu'à minuit. Pour obtenir le nombre d'heures, de minutes et de secondes, je ne les suivants (que j'ai trouvé quelque part):

NSDate* now = [NSDate date];

int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];
int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];
int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];

Cependant, chaque endroit où je utiliser -dateWithCalendarFormat:timeZone: j'obtiens l'erreur suivante:

warning: 'NSDate' may not respond to '-dateWithCalendarFormat:timeZone:'
(Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.)
warning: no '-hourOfDay' method found
error: invalid operands to binary - (have 'int' and 'id')

Cela semble être quelque chose de très simple. Ce qui me manque?

Aussi, j'ai remarqué à différents endroits et à différents moments de l'astérisque (*) est situé à droite après le temps NSDate* now ou juste avant la variable NSDate *now. Quelle est la différence entre les deux et pourquoi voudriez-vous utiliser un contre l'autre?

58voto

Hover Points 401

Vous avez des problèmes avec iOS 4.2? Utilisez ce Code:

NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd.MM.YY HH:mm:ss"];
NSString *dateString = [dateFormatter stringFromDate:currDate];
NSLog(@"%@",dateString);

-->20.01.2011 10:36:02

48voto

Massimo Cafaro Points 18759

Vous devez utiliser la syntaxe suivante:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:yourDateHere];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];

Il n'y a pas de différence entre NSDate* maintenant, et NSDate *maintenant, c'est juste une question de préférence. De le compilateur point de vue, rien ne change.

21voto

Mark Points 4786

Vous pouvez également utiliser:


CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02.0f", currentDate.hour, currentDate.minute, currentDate.second];

Je pense que cela présente les avantages suivants:

  1. Pas directement l'allocation de la mémoire.
  2. Secondes est un double au lieu d'un entier.
  3. Pas de message d'appels.
  4. Plus rapide.

12voto

Hemant Sharma Points 91

// vous pouvez obtenir la date/heure actuelle avec le code suivant:

    NSDate* date = [NSDate date];
    NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
    NSTimeZone *destinationTimeZone = [NSTimeZone systemTimeZone];
    formatter.timeZone = destinationTimeZone;
    [formatter setDateStyle:NSDateFormatterLongStyle];
    [formatter setDateFormat:@"MM/dd/yyyy hh:mma"];
    NSString* dateString = [formatter stringFromDate:date];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X