2013-12-13 45 views
0

我的本地通知過早發射了大約2個小時。我將它設置爲啓動的日期顯示 2013-12-13 17:00:00 +0000本地通知在錯誤時間觸發

但是,我的電話在15:00:00向我發送了通知。我想讓它在用戶當地時間開火。我該如何調整日期,以便在用戶的當地時區觸發......即,不管你在美國的哪個地方,它在17:00:00點燃?

這是我的NSDate的旅程。我解析一個XML文件。從pubdate的標籤:

NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822]; 
      NSString *articleImage = [item valueForChild:@"description"]; 
      NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
      [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
      [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 

      NSString *dateofarticle = [dateFormatter stringFromDate:articleDate]; 
      NSDate *date = [dateFormatter dateFromString:dateofarticle]; 

中的NSDate *日期被添加到財產我已經設置了存儲一切從XML的每個項目的自定義類。所以,用於通知的NSDate就是這樣。當我設置通知時,我不對NSDate進行調整。

從提醒UIActivity:

- (void)prepareWithActivityItems:(NSArray *)activityItems 
{NSLog(@"works"); 
    Class cls = NSClassFromString(@"UILocalNotification"); 
    if (cls != nil) { 
     NSString *message = [@"5 minutes until " stringByAppendingString:self.thetitle]; 
     UILocalNotification *notif = [[cls alloc] init]; 
     // NSLog(@"%@", self.thedate); 
     NSDate *newDate = [self.thedate dateByAddingTimeInterval:-60*5]; 
     NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init]; 

     [formatter3 setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 
     [formatter3 setTimeStyle:NSDateFormatterShortStyle]; 
     [formatter3 setDateStyle:NSDateFormatterShortStyle]; 
     NSString *detailstext = [formatter3 stringFromDate:newDate]; 
     NSDate *othernewdate = [formatter3 dateFromString:detailstext]; 
     NSLog(@"other%@", othernewdate); 
     notif.timeZone = [NSTimeZone systemTimeZone]; 

     notif.fireDate = othernewdate; 

     //NSLog(@"newdate%@", newDate); 

     notif.alertBody = message; 
     notif.alertAction = @"Ok"; 
     notif.soundName = UILocalNotificationDefaultSoundName; 
     notif.applicationIconBadgeNumber = 1; 


       notif.repeatInterval = 0; 


     NSDictionary *userDict = [NSDictionary dictionaryWithObject:message 
                  forKey:kRemindMeNotificationDataKey]; 
     notif.userInfo = userDict; 

     [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
     [self.notifications addObject:notif]; 
     [notif release]; 

    } 
    NSLog(@"Test"); 
    [self activityDidFinish:YES]; 
    } 
- (void)showReminder:(NSString *)text { 

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Reminder" 
                 message:text delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
} 

的的NSLog(@ 「其他%@」,othernewdate);在控制檯中顯示爲2013/12/13 16:55:00 +0000。我在中部時區。

UPDATE#2 在預定通知的區域,我正在運行一些測試。我將XML pubDate更改爲在時間之後顯示-0600,以便保持中央時間。我運行這個代碼和日誌。

NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init]; 

     [formatter3 setTimeStyle:NSDateFormatterShortStyle]; 
     [formatter3 setDateStyle:NSDateFormatterShortStyle]; 
     NSString *detailstext = [formatter3 stringFromDate:self.thedate]; 
     NSDate *othernewdate = [formatter3 dateFromString:detailstext]; 
     NSLog(@"details%@", detailstext); 
     NSLog(@"other%@", othernewdate); 

字符串顯示了這一特定條目正確的日期和時間:

details12/27/13,3:00 PM

的NSDate的說明這一點。所以,我的問題是這樣的。由於下面那個時候在技術上是同一時間......應通知消防正確?:

other2013-12-27 21:00:00 +0000

回答

3

確保有效的時區對象分配給本地通知,即:

localNotification.timeZone = [NSTimeZone systemTimeZone]; 

如果需要通知開火時區的17:00,用timeZoneWithName:創建您的時區的時區對象,並設置爲本地通知的時區。

+0

無論您身在何處,我都希望它在下午5點開火。到下午5點時,通知會觸發。但是,即使將時區設置爲systemTimeZone也不適合我。 – user717452

+0

你是如何設定日期的?如果你在調試器中打印一個NSDate對象,它將在GMT時區顯示,所以不要相信它在那裏所說的內容。 –

+0

有關更多信息,請參閱上面的編輯,因爲它太長而無法到達此處。 – user717452