如何在给定的 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 分钟触发