如何在给定的 NSDate 前两天触发 UILocalNotification?

Posted

技术标签:

【中文标题】如何在给定的 NSDate 前两天触发 UILocalNotification?【英文标题】:How can I fire a UILocalNotification two days before a given NSDate? 【发布时间】:2014-03-01 02:43:33 【问题描述】:

如何在给定的 NSDate 两天前触发 UILocalNotification?

【问题讨论】:

【参考方案1】:

假设eventDate 是您拥有的日期:

NSDate* twoDaysEarlyDate = [[NSDate alloc] initWithTimeInterval:-(86400 * 2) sinceDate:eventDate];

这忽略了在 eventDate 之前发生的任何可能的夏令时更改,这对于本地通知来说可能很好。

如果您需要使 DST 更改生效,另一种方法类似于:

NSCalendar* currentCalendar = [NSCalendar currentCalendar];
NSDateComponents* offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:-2];
NSDate* twoDaysEarlyDate = [currentCalendar dateByAddingComponents:offsetComponents toDate:eventDate options:0];

根据您的需要,任何一个选项都有效。

【讨论】:

为什么不直接使用 NSCalendar 和 NSDateComponents 呢?只是多了几行…… 添加了一种将 DST 更改考虑在内的替代方法。谢谢。【参考方案2】:

假设给定日期是“expirationDate”,而“twoDaysBeforeExpirationDate”是触发 UILocalNotification 的所需日期。那么

NSDate* expirationDate=nil;
NSDate *twoDaysBeforeExpirationDate = [expirationDate dateBySubtractingRequiredDays:2];


- (NSDate *) dateBySubtractingRequiredDays: (NSInteger) dDays

    return [self dateByAddingDays: (dDays * -1)];

【讨论】:

以上是关于如何在给定的 NSDate 前两天触发 UILocalNotification?的主要内容,如果未能解决你的问题,请参考以下文章

UILocalNotification - 在 NSDate 前 30 分钟触发

可靠地检查 NSDate 是不是在给定的小时、天或周内

前两天老爸生日,我给整忘了!还好我有个它提醒和自动发送生日祝福!

给定一个 NSDate,找到前第四个月的最后一天

前两天解决了一个贴吧里面牛年找牛的问题

前两天遇到了错误好久才整明白给大家分享下: