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

感谢分享

时间: 2024-07-29 13:54:46

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

打造百亿美元独角兽必须要做三件事

4 月 16 日消息,创新工场微信公众号上日前发布了一篇创新工场 CEO 李开复日前做了一场分享,讲述春节期间在美国硅谷的见闻. 李开复谈及谷歌.特斯拉.Airbnb 这些企业为何成功.李开复还给创业者建议,称打造百亿美元独角兽,必须要做三件事. 李开复分享的主要内容如下: 我们学到了什么? 在硅谷我们见了 Google 的资深副总裁 Jonathan Rosenberg,他做了一个非常有智慧的分享.在这个分享中我捕捉到几个片段,但其中我认为最重要的是:我们都知道怎样做独角兽,但怎样做一个百亿元

一则微博的感悟——一辈子做一件事

一则微博 很久以前转载过"创业家杂志" 的一则微博,内容如下: 如果你一天做一件事情,说明您是一个能做事的常人: 如果你一个月做一件事情,说明你是一个有点想法的人: 如果你一年做一件事情,说明你是一个想干大事的人: 如果你十年只做一个事情,说明你是一个非凡的人: 如果你一辈子就做一个事情,那你一定是一个伟人. 部分评论 同时有很多精彩的评论,值得我们思考-- 自然成像: 会做一件事,只需要一阵子.做好一件事,需要很长时间.如果想把一件事做到好到极致,那真得做一辈子的打算.理想很重要,行

走出浮躁的泥沼:学会享受学习过程的乐趣 坚持做一件事,直到达到一个境界

http://www.nowamagic.net/librarys/veda/detail/2264学习是一辈子的事情,对于程序员来说更是如此,所以如果没有学会享受学习过程的乐趣,那么学习将会是你人生的一个重压. 以学习数据结构为例.大家都知道,对于程序员而言,数据结构是基础,是必须学会的课程.但是现在很多语言,细节都封装得很好,比如Java..Net.PHP,几乎都不需要你用到多少数据结构与算法的知识,以致于很多人觉得,我就不会数据结构,我还不一样好好工作吗?这就是浮躁的开始了. 的确,对大部

坚持做一件事,直到达到一个境界

学习是一辈子的事情,对于程序员来说更是如此,所以如果没有学会享受学习过程的乐趣,那么学习将会是你人生的一个重压. 以学习数据结构为例.大家都知道,对于程序员而言,数据结构是基础,是必须学会的课程.但是现在很多语言,细节都封装得很好,比如Java..Net.PHP,几乎都不需要你用到多少数据结构与算法的知识,以致于很多人觉得,我就不会数据结构,我还不一样好好工作吗?这就是浮躁的开始了. 的确,对大部分程序员来说,工作上很多时候不需要用到数据结构.但是你会发现,工作若干年后,你的技术水平会停滞不前,

转 《一生只做一件事》

文/高寒 1991年秋天的时候,我在故乡已种了6年田.那6年我吃尽了肉体和精神的苦,我坐在故乡的田埂上对着天空的大雁讲,我这一辈子就在黄山种田吗?我这一辈子适合干什么呢? 当时我已经发表了很多诗,但是我依然很穷,我觉得写诗不是我的出路. 所以我到广东来.1993年到1999年间,我在中国最好的家电公司,做最好的营销干部的老总,可1999年在家电业做得很好的时候,我觉得我在家电业的日子到头了.我觉得我在中国当时最好的家电公司,做销售做到冠军,我已经做到头了.我觉得家电已竞争到没有一点利润的时候,我

一次只做一件事,并做到最好!

Do one thing at a time, and doit well. 一次只做一件事,并做到最好! 版权声明:本文为博主原创文章,未经博主允许不得转载.

你的前半生,可曾有过下定决心做某件事的时候?

作者:陆小凤 首发:微信公众号[程序员江湖] ? 不知道你们有没有看过电视剧<我的前半生> 里面的女主在遭遇家庭变故之后终于颠覆了自己,最终成为了独立的女性. 平淡的生活看似波澜不惊,实际上也在消磨着你的时间,磨平你的棱角和个性. 我的前半生也和大多数人一样平淡,甚至还有点无趣,初高中时代都是一个不谙世事混日子的学生,大学几年时间奉献给了LOL和DOTA,毕业之后有父母安排好的稳定国企工作,剩下的剧情似乎已经没有什么好猜的. 看来我还是察觉到了不对,大三的时候萌发出了考研的想法,虽然一开始是别

我决定做一件事, 为 共量子论 和 “大自然运作机制” 保驾护航

写 这篇文章 的 原因 是 看了 反相吧 帖 <The party is over 杨振宁物理江湖最后一战:阻中国买单对撞机> http://tieba.baidu.com/p/6379486056     . 我在 这个 帖 的 29 楼 这样   回复 : “ 物理学家 们 好幼稚, 好像 幼儿园 的 小孩子 . 物理 其实 很简单 . ” 我之前 说过 要把 反相吧 建设 成为  世界一流 的 科学开源 基地,   做这件事 的 目的 之一 是为 中国科学家 保驾护航     . 一定会

iOS开发——必须知道的几件事(一)

必须知道的几件事(一) 一:启动界面--------- 1.程序启动会自动加载叫做Default的图片 1> 3.5inch 非retain屏幕:Default.png 2> 3.5inch retina屏幕:[email protected] 3> 4.0inch retain屏幕: [email protected] 4>4.70inch retain屏幕: [email protected] 5>5.50inch retain屏幕: [email protected](