// // BLETools.m // FireBoltt // // Created by lemo. on 2020/3/21. // Copyright © 2020 Sheldon. All rights reserved. // #import "BLETools.h" #import "NSString+methods.h" #import "JZLocationConverter.h" @implementation BLETools /** 将时间戳按指定格式时间输出 @param spString 秒 @param formatStr 指定格式 */ + (NSString*)nsdateToTime:(long long)spString formatStr:(NSString *)formatStr { NSDate *date = [NSDate dateWithTimeIntervalSince1970:spString]; NSTimeZone *zone = [NSTimeZone systemTimeZone]; // 获得系统的时区 NSTimeInterval time = [zone secondsFromGMTForDate:date]; [date dateByAddingTimeInterval:time]; NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init]; NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"]; [dateFormat setLocale:locale]; [dateFormat setCalendar: [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]]; [dateFormat setDateFormat:formatStr]; NSString* string=[dateFormat stringFromDate:date]; return string; } /** 将指定格式时间转NSDate输出 */ + (NSDate *)nsdateToformatStr:(NSString *)formatStr { NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init]; [dateFormat setCalendar: [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]]; NSInteger formatStrCount = [formatStr componentsSeparatedByString:@"-"].count; NSArray *timeArr = @[@"yyyy-",@"MM-",@"dd-",@"HH-",@"mm-",@"ss-"]; if (formatStrCount && formatStrCount <= 6) { NSMutableString *format = [[NSMutableString alloc] init]; for (NSInteger i = 0; i < formatStrCount; i ++) { [format appendString:timeArr[i]]; } [dateFormat setDateFormat:[format substringToIndex:format.length - 1]]; NSDate *date = [dateFormat dateFromString:formatStr]; return date; } return nil; } /** 将字符串变成数组 @param valueStr 字符串 @return 返回一个数组 */ + (NSArray *)stringByArrayData:(NSString *)valueStr { NSString *tempStr = [valueStr stringByReplacingOccurrencesOfString:@"|" withString:@"-"]; NSString *tempstring = [tempStr stringByReplacingOccurrencesOfString:@":" withString:@"-"]; NSString *spacestring = [tempstring stringByReplacingOccurrencesOfString:@" " withString:@"-"]; NSArray *valueArray = [spacestring componentsSeparatedByString:@"-"]; return valueArray; } + (NSString *)getCurrentLanguage { NSArray *languages = [NSLocale preferredLanguages]; NSString *currentLanguage = [languages objectAtIndex:0]; return currentLanguage; } /** 获取当前是星期几 把当前日期变成星期 */ + (NSInteger)getNowWeekday { NSDate *date = [NSDate date]; NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; // 指定日历的算法 NSDateComponents *comps = [calendar components:NSCalendarUnitWeekday fromDate:date]; NSInteger week = [comps weekday]; return week; } /** 若是中文直接转拼音 */ + (NSString *)transformPinyin:(NSString *)chinese { if (![BLETools isChinese:chinese]) { return chinese; } NSMutableString *pinyin = [chinese mutableCopy]; CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformMandarinLatin, NO); CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformStripCombiningMarks, NO); //去掉空格 return [[NSString stringWithFormat:@"%@",pinyin] stringByReplacingOccurrencesOfString:@" " withString:@""]; } /** 检测是否是中文 */ +(BOOL)isChinese:(NSString *)str { NSString *match = @"(^[\u4e00-\u9fa5]+$)"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match]; return [predicate evaluateWithObject:str]; } /** 两个时间差(分钟) @param startTime 开始时间 @param endTime 结束时间 @return 分钟 (字符串) */ +(NSString *)compareStartTime:(NSString *)startTime EndTime:(NSString *)endTime { //同一天内 如果开始时间为9:01 结束时间为21:01 那么这条数据就是无效的 //不在一天内如果开始时间为 21:02 结束时间为22:01 那么这条数据也是无效的 if ((![[startTime substringWithRange:NSMakeRange(0, 10)] isEqualToString:[endTime substringWithRange:NSMakeRange(0, 10)]]&&[endTime substringWithRange:NSMakeRange(11, 2)].integerValue >= 21) || ([[startTime substringWithRange:NSMakeRange(0, 10)] isEqualToString:[endTime substringWithRange:NSMakeRange(0, 10)]]&& [startTime substringWithRange:NSMakeRange(11, 2)].integerValue < 21 && [startTime substringWithRange:NSMakeRange(11, 2)].integerValue >= 9)) { return @"0"; } else{ long long start = [NSString changeTimeToMinutes:startTime]; long long end = [NSString changeTimeToMinutes:endTime]; NSString *compareStr = [NSString stringWithFormat:@"%lld",(end-start)/60]; return compareStr; } } /** 本地语言转换 @param language 系统语言 */ +(NSString*)laguageTransform:(NSString*)language { NSDictionary * dict =@{@"zh-Hans-CN":@"zh_CN",// zh-Hans-CN, 简体中文 @"zh-Hant-HK":@"zh_TW",// zh-Hant-HK, 香港繁体 @"zh-Hant-HK":@"zh_TW",// zh-Hant-CN, 繁体中文 @"zh-Hant-MO":@"zh_TW",// zh-Hant-MO, 繁体中文(澳门) @"zh-Hant-TW":@"zh_TW",// zh-Hant-TW 繁体中文(台湾) @"en-CN":@"en_US", // en-CN, 英文 @"en-AU":@"en_US", // en-AU, 英文(澳大利亚) @"en-IN":@"en_US", // en-IN, 英文(印度) @"en-GB":@"en_GB", // en-GB, 英文(英国) @"es-CN":@"es_SA", // es-CN, 西班牙 @"es-419":@"es_SA", // es-419, 西班牙(拉丁美洲) @"es-MX":@"es_SA", // es-MX, 西班牙(墨西哥) @"de-AT":@"de_DE", // de-AT, 德文(奥地利) @"de-CN":@"de_DE", // de-CN, 德文 @"de-DE":@"de_DE", // de-DE, 德文(德国) @"de-CH":@"de_DE", // de-CH, 德文(瑞士) @"fr-BE":@"fr_FR", // fr-BE, 法文(比利时) @"fr-FR":@"fr_FR", // fr-FR, 法文(法国) @"fr-CH":@"fr_FR", // fr-CH, 法文(瑞士) @"fr-CA":@"fr_FR", // fr-CA, 法文(加拿大) @"fr-CN":@"fr_FR", // fr-CN, 法文 @"pt-PT":@"pt_PT", // pt-PT, 葡萄牙文 @"pt-BR":@"pt_BZ", // pt-BR, 葡萄牙(巴西) @"ko-CN":@"ko", // ko-CN, 韩文 @"ja-CN":@"ja_JP", // ja-CN, 日文 @"ru-CN":@"ru_RU", // ru-CN 俄文 @"ro-CN":@"ro_RO", // ro-CN, 罗马尼亚 @"it_CN":@"it_IT", // it-CN, 意大利 @"el_CN":@"el_GR", // el-CN, 希腊文 @"tr-CN":@"tr-TR" // tr-CN, 土耳其 }; NSArray * dictKeyArray = [dict allKeys]; if ([dictKeyArray containsObject:language]) { return dict[language]; }; return nil; } /** 获取时间戳 @param date 日期 @param hour 小时 @param minute 分钟 @param seconds 秒 @return 时间戳 */ + (NSInteger)zeroOfSecondsTimestampWithDate:(NSDate *)date hour:(NSInteger)hour minute:(NSInteger)minute seconds:(NSInteger)seconds { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:[NSDate date]]; components.hour = hour; components.minute = minute; components.second = seconds; NSTimeInterval ts = (NSInteger)[[calendar dateFromComponents:components] timeIntervalSince1970]; return ts; } /** 获取时间戳 @param time 2017-01-01-12-12-12格式的时间 @return 时间戳字符串 */ + (NSString *)getTimestampWithTime:(NSString *)time{ if (!time.length) { return @""; } NSArray *arr = [time componentsSeparatedByString:@"-"]; NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; [inputFormatter setCalendar: [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]]; // [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]]; switch (arr.count) { case 3: [inputFormatter setDateFormat:@"yyyy-MM-dd"]; break; case 4: [inputFormatter setDateFormat:@"yyyy-MM-dd-HH"]; break; case 5: [inputFormatter setDateFormat:@"yyyy-MM-dd-HH-mm"]; break; case 6: [inputFormatter setDateFormat:@"yyyy-MM-dd-HH-mm-ss"]; break; default: break; } NSDate* inputDate = [inputFormatter dateFromString:time]; NSLog(@"date = %@", inputDate); NSString *timestamp = [NSString stringWithFormat:@"%ld",(long)[inputDate timeIntervalSince1970]]; return timestamp; } + (int)heartRateGrade:(NSInteger)heartRate { if (heartRate >= 150 && heartRate<= 180) { return 3; }else if (heartRate >= 120 && heartRate< 150){ return 2; }else if (heartRate < 120){ return 1; } return 1; } /** 将周期字符串转成对应日期字符串(1100000-周一,周二) */ + (NSString *)cycleStrConversion:(NSString *)cycleStr { NSArray *cycleArr = @[NSLocalizedString(@"周一 ", nil), NSLocalizedString(@"周二 ", nil), NSLocalizedString(@"周三 ", nil), NSLocalizedString(@"周四 ", nil), NSLocalizedString(@"周五 ", nil), NSLocalizedString(@"周六 ", nil), NSLocalizedString(@"周日 ", nil)]; NSMutableString *tempStr = [[NSMutableString alloc] init]; for (int i = 0; i < 7; i++) { if ([[cycleStr substringWithRange:NSMakeRange(i, 1)] isEqualToString:@"1"]) { [tempStr appendString:cycleArr[i]]; } } return tempStr.length ? (NSString *)tempStr : NSLocalizedString(@"仅一次", nil); } + (NSString *)stringDecode:(NSString *)str { NSString *result = [(NSString *)str stringByReplacingOccurrencesOfString:@"+" withString:@" "]; result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; return result; } + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString == nil) { return nil; } NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *err; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err]; if(err) { NSLog(@"json解析失败:%@",err); return nil; } return dic; } ///16进制字符串转data + (NSData *)convertHexStrToData:(NSString *)str { if (!str || [str length] == 0) { return nil; } NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:20]; NSRange range; if ([str length] % 2 == 0) { range = NSMakeRange(0, 2); } else { range = NSMakeRange(0, 1); } for (NSInteger i = range.location; i < [str length]; i += 2) { unsigned int anInt; NSString *hexCharStr = [str substringWithRange:range]; NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr]; [scanner scanHexInt:&anInt]; NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1]; [hexData appendData:entity]; range.location += range.length; range.length = 2; } return hexData; } // 将NSLog打印信息保存到Document目录下的文件中 + (void)redirectNSlogToDocumentFolder { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDirectory = [paths objectAtIndex:0]; NSString *fileName = [NSString stringWithFormat:@"%@.log",[[NSDate alloc] initWithTimeIntervalSinceNow:8*3600]]; // 注意不是NSData! NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName]; // 将log输入到文件 freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr); } /** 将步数转换为卡路里,公里(此算法与手环算法一致) @param steps 步数 @param type 0:卡路里 1:公里 */ + (NSString *)stepsConversionCaloriesAndKmStpes:(NSString *)steps type:(NSInteger)type { if (!steps.integerValue) { return @"0"; } // 卡路里跟公里数根据计算(与手环计算公式一致) if (type) { // 公里 = 步数*(0.415*身高)/100000 NSInteger height = 175; return [NSString stringWithFormat:@"%.3f",steps.integerValue * (0.415 * height) / 100000]; } // 卡路里 = 步数 *((体重- 15)* 0.000693 + 0.005895) CGFloat weight = 65.0; return [NSString stringWithFormat:@"%.3f",steps.integerValue * ((weight - 15) * 0.000693 + 0.005895)]; } @end