2012-03-21 4 views
0

Je dois définir une notification UIAlert à 18h00, heure locale. L'heure est fixée à 11h00 et arrivera à 18h00 car le fuseau horaire local dans lequel je me trouve est GMT + 6h00. Cependant, il sera différent dans différents fuseaux horaires. Je veux qu'il soit 18h00 à n'importe quel fuseau horaire. Quelqu'un peut-il m'aider avec bonté? Merci.Concernant NSDateComponents TimeZone

NSDateComponents *comps=[[[NSDateComponents alloc]init]autorelease]; 
    [comps setYear:[year intValue]]; 
    [comps setMonth:[month intValue]]; 
    [comps setDay:[day intValue]]; 
    [comps setHour:[@"11" intValue]];//6pm 
    [comps setMinute:0]; 
    [comps setMinute:0]; 
    [comps setTimeZone:[NSTimeZone localTimeZone]]; 
    NSCalendar *cal=[[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
    NSDate *date1=[[cal dateFromComponents:comps]retain]; 

// code d'alerte locale

NSInteger minutesAhead = 0; 
    NSTimeInterval seconds = (60 * minutesAhead) * -1; 
    NSDate *actualFireDate = [date1 dateByAddingTimeInterval:seconds]; 
    NSMutableDictionary *dictC = [NSMutableDictionary dictionaryWithDictionary:userInfo]; 
    [dictC setObject:date1 forKey:@"PCOriginalReminderDate"]; 

    UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    notification.fireDate = actualFireDate; 
    notification.alertBody = message; 
    notification.userInfo = dictC; 

    [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 
    [notification release]; 

Notes:

Lorsque j'imprime la date, il dit:

date = "2012-04-04 18:00:00 +0000"; 

Je pense que cela veut dire que 11 heures était GMT et en ajoutant 7 heures (depuis son GMT +7 - daylight) et le rend 18 heures.

Répondre

1

Vous voulez régler la timeZone property de votre UILocalNotification:

La date spécifiée dans fireDate est interprétée en fonction de la valeur de cette propriété. Si vous spécifiez nil (valeur par défaut), la date d'incendie est interprétée comme une heure GMT absolue, ce qui est approprié pour les cas tels que les compteurs à rebours. Si vous affectez un objet NSTimeZone valide à cette propriété, la date d'incendie est interprétée comme une heure de l'horloge murale qui est automatiquement ajustée en cas de modification des fuseaux horaires. un exemple approprié pour ce cas est un réveil.

Donc, si vous définissez votre notification de fireDate au moment où vous créez dans votre extrait, et définissez sa timeZone-[NSTimeZone localTimeZone] alors vous serez bon d'aller.

+0

Je pense que je fais tout correctement. J'ai ajouté le code complet. Veuillez me faire savoir où je fais l'erreur. – Ahsan

+0

Quand vous dites "quand j'imprime la date", de quelle date parlez-vous? En outre, vous ne définissez pas la propriété 'timeZone' de la notification. – yuji

Questions connexes