我的本地通知過早發射了大約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
無論您身在何處,我都希望它在下午5點開火。到下午5點時,通知會觸發。但是,即使將時區設置爲systemTimeZone也不適合我。 – user717452
你是如何設定日期的?如果你在調試器中打印一個NSDate對象,它將在GMT時區顯示,所以不要相信它在那裏所說的內容。 –
有關更多信息,請參閱上面的編輯,因爲它太長而無法到達此處。 – user717452