无论用户位于何处,如何找出用户的晚上8点?

时间:2013-11-20 23:57:38

标签: ios ios7 nsdate nscalendar nstimezone

我正在实施UILocalNotification以提醒首次用户在晚上8:00再次使用该应用。用户可以完全关闭它或设置不同的时间。

我下班后的时间是晚上8点,因此不会打扰或打扰。

我不知道如何处理时区。

如果用户在纽约。 [NSDate date]仅返回GMT日期时间(自参考日期起的时刻)。那我怎么确定他晚上8点?

我可以这样做吗?

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

NSDateComponents *dateComps = [calendar components:(NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitTimeZone) fromDate:[NSDate date]];

[dateComps setHour:20];
[dateComps setTimeZone:[NSTimeZone defaultTimeZone]];

NSDate *result = [calendar dateFromComponents:dateComps];

1 个答案:

答案 0 :(得分:3)

来自UILocalNotification docs

  

fireDate中指定的日期将根据此属性的值进行解释。如果指定nil(默认值),则开火日期将被解释为绝对GMT时间,适用于倒数计时器等情况。如果为此属性分配有效的NSTimeZone对象,则开火日期将被解释为当时区发生变化时自动调整的挂钟时间;适合这种情况的一个例子是闹钟。

因此,为了确保您的通知设置在相同的“挂钟”时间(例如晚上8点),无论时区如何,只需执行

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = theDate;
localNotification.timeZone = [NSTimeZone defaultTimeZone];