最近遇見(jiàn)一個(gè)問(wèn)題:我們的產(chǎn)品有服務(wù)期限邦投,我就用系統(tǒng)的時(shí)間來(lái)判斷服務(wù)期限是否到期找爱。但是發(fā)現(xiàn)呢枯芬,用戶可以通過(guò)改iPhone的系統(tǒng)時(shí)間從而繼續(xù)使用我們的產(chǎn)品,也就是說(shuō)[NSDate date]獲取的是手機(jī)系統(tǒng)的時(shí)間徘意,不是世界統(tǒng)一時(shí)間(在沒(méi)網(wǎng)的情況下是無(wú)法去校準(zhǔn)的)。所以最后決定用網(wǎng)絡(luò)時(shí)間來(lái)處理這個(gè)問(wèn)題轩褐。
思路很簡(jiǎn)單:1椎咧、創(chuàng)建一個(gè)網(wǎng)絡(luò)請(qǐng)求,向一個(gè)永遠(yuǎn)生效的URL獲取它的Respone灾挨。2邑退、從Respone的allHeaderFields中拿到時(shí)間字符串。3劳澄、將時(shí)間字符串經(jīng)過(guò)一些格式轉(zhuǎn)換后,從而獲取NSDate蜈七。
我對(duì)http://www.reibang.com/p/ffc758b8eb0e上的代碼進(jìn)行了修改秒拔,我使用了異步獲取,主線程返回飒硅,同時(shí)兼容中文和英文環(huán)境砂缩,返回的是時(shí)間戳(時(shí)間戳比較好對(duì)比),大家可以根據(jù)時(shí)間戳自行處理三娩。
以下是源碼(一個(gè)類(lèi)方法)庵芭,復(fù)制便可使用。?
#pragma mark --請(qǐng)求網(wǎng)絡(luò)時(shí)間戳
+ (void)getInternetDateWithSuccess:(void(^)(NSTimeInterval timeInterval))success
? ? ? ? ? ? ? ? ? ? ? ? ? failure:(void(^)(NSError *error))failure{
? ? //1.創(chuàng)建URL
? ? NSString *urlString = @"http://m.baidu.com";
? ? urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
? ? //2.創(chuàng)建request請(qǐng)求對(duì)象
? ? NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
? ? [request setURL:[NSURL URLWithString: urlString]];
? ? [request setCachePolicy:NSURLRequestReloadIgnoringCacheData];
? ? [request setTimeoutInterval:5];
? ? [request setHTTPShouldHandleCookies:FALSE];
? ? [request setHTTPMethod:@"GET"];
? ? //3.創(chuàng)建URLSession對(duì)象
? ? NSURLSession *session = [NSURLSession sharedSession];
? ? //4.設(shè)置數(shù)據(jù)返回回調(diào)的block
? ? NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
? ? ? ? if (error == nil && response != nil) {
? ? ? ? ? ? //這么做的原因是簡(jiǎn)體中文下的手機(jī)不能識(shí)別“MMM”雀监,只能識(shí)別“MM”
? ? ? ? ? ? NSArray *monthEnglishArray = @[@"Jan",@"Feb",@"Mar",@"Apr",@"May",@"Jun",@"Jul",@"Aug",@"Sept",@"Sep",@"Oct",@"Nov",@"Dec"];
? ? ? ? ? ? NSArray *monthNumArray = @[@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"09",@"10",@"11",@"12"];
? ? ? ? ? ? NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
? ? ? ? ? ? NSDictionary *allHeaderFields = [httpResponse allHeaderFields];
? ? ? ? ? ? NSString *dateStr = [allHeaderFields objectForKey:@"Date"];
? ? ? ? ? ? dateStr = [dateStr substringFromIndex:5];
? ? ? ? ? ? dateStr = [dateStr substringToIndex:[dateStr length]-4];
? ? ? ? ? ? dateStr = [dateStr stringByAppendingString:@" +0000"];
? ? ? ? ? ? //當(dāng)前語(yǔ)言是中文的話双吆,識(shí)別不了英文縮寫(xiě)
? ? ? ? ? ? for (NSInteger i = 0 ; i < monthEnglishArray.count ; i++) {
? ? ? ? ? ? ? ? NSString *monthEngStr = monthEnglishArray[i];
? ? ? ? ? ? ? ? NSString *monthNumStr = monthNumArray[i];
? ? ? ? ? ? ? ? dateStr = [dateStr stringByReplacingOccurrencesOfString:monthEngStr withString:monthNumStr];
? ? ? ? ? ? }
? ? ? ? ? ? NSDateFormatter *dMatter = [[NSDateFormatter alloc] init];
? ? ? ? ? ? [dMatter setDateFormat:@"dd MM yyyy HH:mm:ss Z"];
? ? ? ? ? ? NSDate *netDate = [dMatter dateFromString:dateStr];
? ? ? ? ? ? NSTimeInterval timeInterval = [netDate timeIntervalSince1970];
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? success(timeInterval);
? ? ? ? ? ? });
? ? ? ? }else{
? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? ? ? ? ? failure(error);
? ? ? ? ? ? });
? ? ? ? }
? ? }];
? ? //5、執(zhí)行網(wǎng)絡(luò)請(qǐng)求
? ? [task resume];
}
希望能幫到您会前。