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
感谢分享
iOS 特定时间内才做某件事,有类似奇葩需求可以参考的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议144:一个方法只做一件事
建议144:一个方法只做一件事 “单一职责原则”(SRP)要求每一个类型只负责一件事情.我们将此概念扩展到方法上,就变成了:一个方法只做一件事. 回顾上一建议的代码,LocalInit和RemoteI ...
- 安装linux mint后要做20件事
Linux Mint 17 Qiana Cinnamon Linux Mint 17已经发布,定名为Qiana.Mint是Linux最佳发行版之一,它定位于桌面用户,关注可用性和简洁.它携带了风格迥异 ...
- Functions should do one thing一个函数应该只做一件事
if you take nothing else away from this guide other than this, you'll be ahead of many developers. 如 ...
- Qt Model/View理解(二)---构造model(细心研读,发现超简单,Model就是做三件事:返回行数量、列数量、data如何显示。然后把model与view联系起来即可,两个例子都是如此)good
数据是一个集合,显示也是一个集合.例如一篇<西游记>的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现. 下面是将一个二 ...
- 让一个端口同时做两件事:http/https和ssh
相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache.Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Serv ...
- 如果你的eclipse在每次run或debug时都莫名其妙的做一件事
新项目,使用Ant打war包.结果写完了Ant以后,包是打好了,却使eclipse以后每次run或debug时都莫名其妙地自动先执行这个Ant, 让人十分苦恼. 其实,是你的eclipse设置出了问题 ...
- head first c 笔记<3> 之做一件事并把它做好
1.标准输入.输出与重定向 scanf()和printf()分别为标准输入输出.默认的会从键盘得到数据,在显示器输出数据,是fscanf()和fprintf()函数的特例. 我们也能够用重定向来改变默 ...
- BAT大神推荐:看懂英文文档,每天只需要10分钟做这件事……
程序员这个行业是很特殊的.之所以说特殊,就是因为它所有的技术大多来自欧美,所以最主流,最新鲜,最正确的技术文章都是英文,遗憾的是,大部分还没有译本. 有些译文还比较差.与其等待别人的翻译,不如直接阅读 ...
- 关于 Java Collections API 您不知道的 5 件事,第 1 部分
定制和扩展 Java Collections Java™ Collections API 远不止是数组的替代品,虽然一开始这样用也不错.Ted Neward 提供了关于用 Collections 做更 ...
随机推荐
- 可以在任何时候attach一个shader到program对象
可以在任何时候attach一个shader到program对象,不一定非要在指定source和编译以后,具体的描述如下: Once you have a program object create ...
- XE6入门(二)项目中的文件
XE6中项目文件为DPR,查看方法请参考一下以前写过的博文: "Delphi项目构成之项目文件DPR" 项目文件DPR 通过主菜单[Project | View Source],就 ...
- FireDAC中的SQLite(一)
Windows client software,FireDAC supports two SQLite library linking modes: Static linking: the x86 s ...
- CentOS7安装Docker与使用篇
一.在CentOS7上安装Docker篇 1. 查看系统版本: $ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) 2. 安装 ...
- Office办公 如何设置WPS的默认背景大小
设计-页面设置,然后修改宽度和高度 因为我们只是需要背景跟平面差不多大(不同屏幕比如宽屏的就比较长),修改宽度和高度的时候注意文字之类的也会被拉伸缩放,所以自己改了之后看效果,比如我100,50的 ...
- 牛客网-《剑指offer》-旋转数组的最小数
题目:http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba C++ class Solution { public: in ...
- Intellij IDEA连接Spark集群
1. 首先安装Scala插件,File->Settings->Plugins,搜索出Scla插件,点击Install安装: 2. File->New Project->mave ...
- tpcc-mysql 系列二:进行TPCC测试
1:开始测试 tpcc_start -h server_host -P port -d database_name -u mysql_user \ -p mysql_password -w wareh ...
- 使用go语言解析xml
操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(default.xml): <?xml ...
- SpringMVC学习笔记三:拦截器
一:拦截器工作原理 类比Struts2的拦截器,通过拦截器可以实现在调用controller的方法前.后进行一些操作. 二:拦截器实现 1:实现拦截器类 实现HandlerInterceptor 接口 ...