1. 程式人生 > >iOS 特定時間內才做某件事,有類似奇葩需求可以參考

iOS 特定時間內才做某件事,有類似奇葩需求可以參考

eset 之前 tostring sca shanghai imei 設置時間 current nsca

我們項目啟動的時候要彈出一個廣告窗口,很簡單的一個功能,服務器的判斷一下滿足條件,即返回數據,客戶端判斷數據部位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:@"[email protected]
/* */",[GDDateUtil stringFromDateSetDateFormat:@"yyMMdd"]]]) { //在NSUserDefaults 取值KamYES 判斷今天上午是否啟動過 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"[email protected]",[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:@"[email protected]
/* */",[GDDateUtil stringFromDateSetDateFormat:@"yyMMdd"]]]) { //在NSUserDefaults 取值KpmYES 判斷今天下午是否啟動過 [[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"[email protected]",[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 特定時間內才做某件事,有類似奇葩需求可以參考