0

UILocalNotification のストアを作成するメソッドがあります。

- (void)save:(NSString *)program at:(NSDate*)date  {

    NSLog(@"date to save: %@", date);
   // NSLog(@"timezone: %@",[date descriptionWithLocale:[NSLocale systemLocale]]);


    UILocalNotification* localNotification = [[UILocalNotification alloc] init];

    NSLog(@"date to fire: %@", date);
    localNotification.fireDate = date;

    NSString *s=[program stringByAppendingString:@" is now on "];
    NSString *title=[s stringByAppendingString:channel];
    localNotification.alertBody = title;

    localNotification.alertAction = @"Show...";
    //localNotification.timeZone = [NSTimeZone localTimeZone];


    localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;

    NSLog(@"notification to save %@",localNotification);

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

    // Request to reload table view data
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:self];

    // Dismiss the view controller
    [self dismissViewControllerAnimated:YES completion:nil];
}

そして、私は出力として持っています:

date to save: 2013-08-29 17:00:00 +0000
date to fire: 2013-08-29 17:00:00 +0000
notification to save <UIConcreteLocalNotification: 0xc0c4240>{fire date = Thursday, August 29, 2013, 6:00:00 PM Central European Standard Time, time zone = (null), repeat interval = 0, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Thursday, August 29, 2013, 6:00:00 PM Central European Standard Time, user info = (null)}

タイムゾーン設定のコメントを外しても、UILocalNotification は常に 1 時間ずつ増加します。なぜ、どのように ? 助けてくれてありがとう。

4

1 に答える 1

7

GMT で渡す日付は、ローカル タイム ゾーンと一致しません。

したがって、日付を 17:00 に設定すると、時間は GMT+1 であるタイムゾーン (CET) に修正されます。したがって、あなたの日付に1時間が追加されます。

UILocalNotification解決策は、タイムゾーンを GMTに設定することです。

localNotification.timeZone = [NSTimeZone timeZoneWithName@"GMT"];

Appleのドキュメントから

fireDate で指定された日付は、このプロパティの値に従って解釈されます。nil (デフォルト) を指定すると、起動日は絶対 GMT 時間として解釈されます。これは、カウントダウン タイマーなどの場合に適しています。有効な NSTimeZone オブジェクトをこのプロパティに割り当てた場合、開始日は実時間として解釈され、タイム ゾーンが変更されたときに自動的に調整されます。この場合に適した例は、目覚まし時計です。

于 2013-08-29T13:29:32.827 に答える