Я просто провел несколько тестов на прошивке 6.1.3. Вот что я получил:
Я нахожусь в Сиэтле, в 1:00 вечера (по тихоокеанскому летнему времени, GMT-7). Я создал 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];
теперь у меня есть
fireDate = 2013-08-31 19:00:00 +0000 (2013-08-31 12:00:00 -0700)
Затем я создал и назначил уведомление:
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);
бревна уведомлений только что создали, в Сиэтле (тихоокеанское летнее время , 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
Я изменил часовой пояс телефона в Чикаго, где сейчас 3:00 PM (Central Daylight Time, GMT-5).
Журналы уведомлений, в Чикаго (Центральное летнее время, 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
Выводы:
- Когда UILocalNotification
timeZone
равна нулю, дата пожара фиксируется во времени. Это означает, что уведомление будет выпущено в 12:00 PM GMT-7, 2:00 PM GMT-5 или 7:00 GMT.
- Когда UILocalNotification
timeZone
настроен на GMT, дата пожара рассчитывается для GMT и будет автоматически обновляться, если пользователь перейдет в другой часовой пояс. В этом примере время 12:00 GMT-7 было преобразовано в 19:00 по Гринвичу, и уведомление было установлено в 19:00 по местному времени, независимо от того, какой часовой пояс мы (19:00 GMT, 19:00 GMT-5 или 19:00 GMT-7).
- Когда UILocalNotification
timeZone
установлен в местный часовой пояс (Pacific Daylight Time, GMT-7), дата огня рассчитывается для местного времени и будет автоматически обновляться, если пользователь перейдет в другой часовой пояс. В этом примере время было 12:00 GMT-7, поэтому уведомление будет выпущено в 12:00 по местному времени, независимо от того, в какой часовой зоне мы находимся (12:00 GMT, 12:00 GMT-5 или 12:00 GMT- 7).
Awesome. Технически вы запланировали это для 7PM GMT вместо полудня, но он также отвечает на вопрос. –
Есть ли у кого-нибудь подобное расследование относительно дат запуска UNNotification в iOS 10? – Jonny
@ Jonny Мне тоже интересно. Кажется, настройка часового пояса не имеет значения. – David