Właśnie przeprowadziłem testy na iOS 6.1.3. Oto, co mam:
Jestem w Seattle, o 13:00 (czas letni Pacyfiku, GMT-7). I stworzył NSDate
:
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
// 2013-08-31 @ 12:00:00 (noon)
dateComponents.year = 2013;
dateComponents.month = 8;
dateComponents.day = 31;
dateComponents.hour = 12;
dateComponents.minute = 0;
dateComponents.second = 0;
NSDate *fireDate = [gregorianCalendar dateFromComponents:dateComponents];
teraz mam
fireDate = 2013-08-31 19:00:00 +0000 (2013-08-31 12:00:00 -0700)
Potem stworzył i zaplanowane powiadomień:
notification1 = [[UILocalNotification alloc] init];
notification1.fireDate = fireDate;
// notification1.timeZone is nil by default
NSLog(@"%@", notification1);
notification2 = [[UILocalNotification alloc] init];
notification2.fireDate = fireDate;
notification2.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSLog(@"%@", notification2);
notification3 = [[UILocalNotification alloc] init];
notification3.fireDate = fireDate;
notification3.timeZone = [NSTimeZone defaultTimeZone];
NSLog(@"%@", notification3);
dzienników powiadomień właśnie utworzony w Seattle (Pacific Daylight Time , GMT-7):
notification1:
fire date = Saturday, August 31, 2013, 12:00:00 PM Pacific Daylight Time,
time zone = (null),
next fire date = Saturday, August 31, 2013, 12:00:00 PM Pacific Daylight Time
notification2:
fire date = Saturday, August 31, 2013, 7:00:00 PM GMT,
time zone = GMT (GMT) offset 0,
next fire date = Saturday, August 31, 2013, 7:00:00 PM Pacific Daylight Time
notification3:
fire date = Saturday, August 31, 2013, 12:00:00 PM Pacific Daylight Time,
time zone = US/Pacific (PDT) offset -25200 (Daylight),
next fire date = Saturday, August 31, 2013, 12:00:00 PM Pacific Daylight Time
Zmieniłem strefę czasową telefonu na Chicago, gdzie teraz jest godzina 15:00 (centralny czas letni, GMT-5).
Kłody zgłoszeń, w Chicago (Central Daylight Time, GMT-5)
notification1:
fire date = Saturday, August 31, 2013, 2:00:00 PM Central Daylight Time,
time zone = (null),
next fire date = Saturday, August 31, 2013, 2:00:00 PM Central Daylight Time
notification2:
fire date = Saturday, August 31, 2013, 7:00:00 PM GMT,
time zone = GMT (GMT) offset 0,
next fire date = Saturday, August 31, 2013, 7:00:00 PM Central Daylight Time
notification3:
fire date = Saturday, August 31, 2013, 12:00:00 PM Pacific Daylight Time,
time zone = US/Pacific (PDT) offset -25200 (Daylight),
next fire date = Saturday, August 31, 2013, 12:00:00 PM Central Daylight Time
Wnioski:
- Kiedy UILocalNotification
timeZone
jest zerowa, data ogień jest stała w czasie. Oznacza to, że powiadomienie zostanie uruchomione o godzinie 12:00 GMT-7, 2:00 PM GMT-5 lub 7:00 GMT.
- Po ustawieniu UILocalNotification
timeZone
na GMT, data pożaru jest obliczana dla czasu GMT i będzie automatycznie aktualizowana, jeśli użytkownik przejdzie do innej strefy czasowej. W tym przykładzie czas 12:00 GMT-7 został zmieniony na 19:00 GMT, a powiadomienie zostało ustawione na 19:00 czasu lokalnego, bez względu na to, gdzie jesteśmy (19:00 GMT, 19:00 GMT-5 lub 19:00 GMT-7).
- Po ustawieniu UILocalNotification
timeZone
na lokalną strefę czasową (Pacyficzny czas letni, GMT-7), data pożaru jest obliczana dla czasu lokalnego i będzie automatycznie aktualizowana, jeśli użytkownik przejdzie do innej strefy czasowej. W tym przykładzie czas wyniósł 12:00 GMT-7, więc powiadomienie zostanie uruchomione o 12:00 czasu lokalnego, bez względu na strefę czasową, w której się znajdujemy (12:00 GMT, 12:00 GMT-5 lub 12:00 GMT- 7).
Awesome. Technicznie zaplanowałeś to na 7 GMT zamiast w południe, ale odpowiada również na pytanie. –
Czy ktoś ma podobne dochodzenie dotyczące dat wywołania UNNotification w iOS 10? – Jonny
@ Jonny też się nad tym zastanawiam. Wygląda na to, że ustawienie strefy czasowej nie ma znaczenia. – David