iOS 特定时间内才做某件事,有类似奇葩需求可以参考

我们项目启动的时候要弹出一个广告窗口,很简单的一个功能,服务器的判断一下满足条件,即返回数据,客户端判断数据部位NULL,则弹出弹窗
但是老板说,这个要时间短弹出,每天的中午12点到下午2点不能弹出来
这这这,有点坑我们吧,每天存一个key,有点坑吧
仔细想想,没有必要啊,这就是考验我们对时间的操作,代码实现如下:

代码实现
#pragma mark  --  判断是否弹出广告
- (BOOL)isLoadAdvertIn
{
    //当前时间戳
    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970]; NSTimeInterval time00 = [GDDateUtil setCurrentlyDaySetHour:00 setMinute:00 setSec:00];//当前天00点的时间戳 NSTimeInterval time12 = [GDDateUtil setCurrentlyDaySetHour:12 setMinute:00 setSec:00];//当前天12点的时间戳 NSTimeInterval time14 = [GDDateUtil setCurrentlyDaySetHour:14 setMinute:00 setSec:00];//当前天14点的时间戳 NSTimeInterval time24 = [GDDateUtil setCurrentlyDaySetHour:24 setMinute:00 setSec:00];//当前天24点的时间戳 if (interval > time00 && interval < time12) {//时间段是00 - 12 点之间 //这样判断当前时间绝对是00点以后 interval > time00 //interval < time12 只要符合 则当前时间就在上午12点之前 if (![[[NSUserDefaults standardUserDefaults] objectForKey:@"KamYES"] isEqualToString:[NSString stringWithFormat:@"%@Kam",[GDDateUtil stringFromDateSetDateFormat:@"yyMMdd"]]]) { //在NSUserDefaults 取值KamYES 判断今天上午是否启动过 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%@Kam",[GDDateUtil stringFromDateSetDateFormat:@"yyMMdd"]] forKey:@"KamYES"]; //满足这个条件说明没有启动过,将今天的值存放,则返回YES return YES; } return NO; }else if (interval > time14 && interval < time24){//时间在12 - 24点之间 //interval < time24 当前的时间绝对要小于24点,如果大于了 则是另外一天,因为[GDDateUtil setCurrentlyDaySetHour:xx setMinute:xx setSec:xx]方法是获取当天的时间,所以不会出现interval>time24的情况 //interval > time14 说明当前时间为14点之后 if (![[[NSUserDefaults standardUserDefaults] objectForKey:@"KpmYES"] isEqualToString:[NSString stringWithFormat:@"%@Kpm",[GDDateUtil stringFromDateSetDateFormat:@"yyMMdd"]]]) { //在NSUserDefaults 取值KpmYES 判断今天下午是否启动过 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%@Kpm",[GDDateUtil stringFromDateSetDateFormat:@"yyMMdd"]] forKey:@"KpmYES"]; //满足这个条件说明没有启动过,将今天的值存放,则返回YES } return NO; } return NO; }

里面注释写的很清楚了吧,我可能代码里面有个类目,代码如下:

获取当前天数时间几点几分的时间戳

[GDDateUtil setCurrentlyDaySetHour:xx setMinute:xx setSec:xx]

/**
 *  获取当前天数时间几点几分的时间戳
 *
 *  @return return 时间戳
 */
+ (NSTimeInterval)setCurrentlyDaySetHour:(NSInteger)hour setMinute:(NSInteger)minute setSec:(NSInteger)sec { if (hour == 24) {//如果是24时,则是第二天的00点,所以做细微处理 hour = 23; minute = 59; sec = 59; } NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"]; [greCalendar setTimeZone: timeZone]; NSDateComponents *dateComponents = [greCalendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]]; // 定义一个NSDateComponents对象,设置一个时间点 NSDateComponents *dateComponentsForDate = [[NSDateComponents alloc] init]; [dateComponentsForDate setDay:dateComponents.day]; [dateComponentsForDate setMonth:dateComponents.month]; [dateComponentsForDate setYear:dateComponents.year]; [dateComponentsForDate setHour:hour]; [dateComponentsForDate setMinute:minute]; [dateComponentsForDate setSecond:sec]; NSDate *dateFromDateComponentsForDate = [greCalendar dateFromComponents:dateComponentsForDate]; return [dateFromDateComponentsForDate timeIntervalSince1970]; }
获取时间,并转换为字符串

[GDDateUtil stringFromDateSetDateFormat:xxx]

/**
 *  获取时间,并转换为字符串
 *
 *  @return return 返回字符串
 */
+ (NSString *)stringFromDateSetDateFormat:(NSString *)formatString
{
    NSDate *date =[NSDate date]; NSDateFormatter *formater = [[NSDateFormatter alloc] init]; [formater setDateFormat:formatString];//设置时间显示的格式,此处使用的formater格式要与字符串格式完全一致,否则转换失败 NSString *dateStr = [formater stringFromDate:date];//将日期转换成字符串 return dateStr; }



链接:http://www.jianshu.com/p/674bf1b42cd7

感谢分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值