Tôi vừa chạy một số thử nghiệm trên iOS 6.1.3. Dưới đây là những gì tôi nhận được:
Tôi đang ở Seattle, lúc 1:00 chiều (Giờ ban ngày Thái Bình Dương, GMT-7). Tôi tạo ra một 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];
bây giờ tôi có
fireDate = 2013-08-31 19:00:00 +0000 (2013-08-31 12:00:00 -0700)
Sau đó, tôi tạo ra và sắp xếp các thông báo:
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);
Logs các thông báo vừa tạo, tại thành phố 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
Tôi đã thay đổi múi giờ của điện thoại thành Chicago, hiện giờ là 3 giờ chiều (Giờ ban ngày miền Trung, GMT-5).
Logs các thông báo, ở Chicago (Trung 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
Kết luận:
- Khi UILocalNotification
timeZone
là con số không, ngày đám cháy được cố định trong thời gian. Điều đó có nghĩa là thông báo sẽ được kích hoạt lúc 12:00 CH GMT-7, 2:00 CH GMT-5 hoặc 7:00 GMT.
- Khi UILocalNotification
timeZone
được đặt thành GMT, ngày lửa được tính theo giờ GMT và sẽ tự động cập nhật nếu người dùng chuyển đến múi giờ khác. Trong ví dụ này, thời gian 12:00 GMT-7 được chuyển đổi thành 19:00 GMT và thông báo được đặt thành 19:00 giờ địa phương, bất kể múi giờ nào chúng tôi là (19:00 GMT, 19:00 GMT-5 hoặc 19:00 GMT-7).
- Khi UILocalNotification
timeZone
được đặt thành múi giờ địa phương (Giờ ban ngày Thái Bình Dương, GMT-7), ngày lửa được tính theo giờ địa phương và sẽ tự động cập nhật nếu người dùng chuyển đến múi giờ khác. Trong ví dụ này, thời gian là 12:00 GMT-7, vì vậy thông báo sẽ được kích hoạt vào lúc 12:00 giờ địa phương, bất kể múi giờ nào chúng tôi là (12:00 GMT, 12:00 GMT-5 hoặc 12:00 GMT- 7).
Tuyệt vời. Về mặt kỹ thuật, bạn đã lên lịch cho 7 giờ chiều giờ GMT thay vì buổi trưa, nhưng nó cũng trả lời câu hỏi. –
Có ai có cuộc điều tra tương tự về ngày kích hoạt UNNotification trong iOS 10 không? – Jonny
@Jonny Tôi cũng tự hỏi điều đó. Dường như việc đặt múi giờ không có sự khác biệt. – David