最近在项目中修改远程推送的逻辑的时候,发现公司的远程推送是这么做的:
1、没有设置远程推送,只设置了本地推送;
2、在程序变成激活状态之后,程序会请求服务端数据(在后台设置好的推送信息),将所有信息设置成本地推送;
3、时间到了进行推送。
那么问题来了,推送过了的怎么办?
所以就做了一个时间对比,将所有请求到的数据的推送时间和当前时间做对比,过去的就不设置本地推送。
1、时间格式转换
//实例化一个NSDateFormatter对象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//设定时间格式,这里可以设置成自己需要的格式,hh与HH的区别:分别表示12小时制,24小时制
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//用[NSDate date]可以获取系统当前时间
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
//输出格式为:2010-10-27 10:22:13
NSLog(@"%@",currentDateStr);
//根据字符串转换成一种时间格式
NSString* string = @"2013-07-16 13:21";
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSDate* inputDate = [inputFormatter dateFromString:string];
//时间戳的值
NSString *timeSp = [NSString stringWithFormat:@"%f", [datenow timeIntervalSince1970]];
NSLog(@"%@",timeSp);
NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:1];
NSLog(@"%@",confromTimesp);
NSString *confromTimespStr = [formatter stringFromDate:confromTimesp];
NSLog(@"%@",confromTimespStr);
//时间戳转时间的方法:
NSString *str=@"1368082020";//时间戳
NSTimeInterval time=[str doubleValue];
NSDate *detaildate=[NSDate dateWithTimeIntervalSince1970:time];
NSLog(@"date:%@",[detaildate description]);
//设置时区的方法
NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
[formatter setTimeZone:timeZone];
NSDate *date = [formatter dateFromString:timeStr];
2、日期之间的比较
- (BOOL)isEqualToDate:(NSDate *)otherDate;
与otherDate比较,相同返回YES
- (NSDate *)earlierDate:(NSDate *)otherDate;
与otherDate比较,返回较早的那个日期
- (NSDate *)laterDate:(NSDate *)otherDate;
与otherDate比较,返回较晚的那个日期
- (NSComparisonResult)compare:(NSDate *)other;
该方法用于排序时调用:
当实例保存的日期值与otherDate相同时返回NSOrderedSame
当实例保存的日期值晚于otherDate时返回NSOrderedDescending
当实例保存的日期值早于otherDate时返回NSOrderedAscending
对于时区的设置我也比较模糊,等有时间好好测试一下再更新文章!