2010-11-15 3 views
0

j'ai essayé d'envelopper ma tête autour NSDate, NSCalendar, NSDateComponents, NSTimeZone et NSDateFormatter.Comment obtenir une NSDate d'une zone de temps spécifique et effectuer des calculs basés sur cette date

NSDate, NSTimeZone et NSDateFormatter sont assez simples. Les autres classes ne le sont pas.

Je souhaite obtenir l'heure actuelle de l'heure de l'Est (la date et l'heure actuelles sont en heure normale de l'Est au moment de l'exécution du code). Puis je veux avancer cette date d'exactement un mois, en tenant compte de l'heure d'été qui peut (ou peut ne pas être) en vigueur. D'après ce que je comprends, ajouter 84600 est la manière incorrecte de le faire, mais je peux me tromper.

Quelqu'un peut-il s'il vous plaît poster un exemple de la façon de faire cela?

Répondre

2

Il est en fait assez simple:

NSDate *now = [NSDate date]; 

NSDateComponents *oneMonth = [[[NSDateComponents alloc] init] autorelease]; 
[oneMonth setMonth:1]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDate *oneMonthFromNow = [calendar dateByAddingComponents:oneMonth toDate:now options:0]; 

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
[df setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; 
[df setDateStyle:NSDateFormatterMediumStyle]; 
[df setTimeStyle:NSDateFormatterMediumStyle]; 

NSLog(@"Now in New York: %@", [df stringFromDate:now]); 
NSLog(@"One month from now in New York: %@", [df stringFromDate:oneMonthFromNow]); 

Edit: Cela dit, votre question est formulée un peu prêter à confusion. Avec NSDate, vous ne faites pas de calculs dans un fuseau horaire spécifique. Vous n'obtenez pas non plus «l'heure actuelle de l'Est». Vous venez d'obtenir le moment actuel (quel que soit le fuseau horaire) et faites vos calculs dessus. La conversion réelle à un fuseau horaire spécifique se produit uniquement à la sortie (lorsque vous affichez l'heure à l'utilisateur, généralement dans son fuseau horaire).

+0

Laissez-moi tenter le coup et je reviendrai ici. –

Questions connexes