// // test.m // Twear // // Created by yangbin on 2021/12/14. // #import "test.h" @implementation test - (void)parseKCTHistorySleep: (NSData *)paramArray { int dataGroupLength = (int)(paramArray.length - 3) / 3; if(dataGroupLength == 0){ return ; } int deepTime = 0,lightTime = 0,awakeTime = 0, sleepTime = 0; NSString *startDate; NSString *endDate; NSString *day; int dataType; dataType = *(int *)[paramArray subdataWithRange:NSMakeRange(3, 1)].bytes; NSMutableData *startDatebs = [NSMutableData dataWithData:[paramArray subdataWithRange:NSMakeRange(0, 3)]]; NSData *timeStart = [paramArray subdataWithRange:NSMakeRange(4, 2)]; [startDatebs appendData:timeStart]; for(int i = 0; i < dataGroupLength; i++){ NSData *oneGroupData = [paramArray subdataWithRange:NSMakeRange(i*3+3, 3)]; NSMutableData *endDatebs = [NSMutableData dataWithData:[paramArray subdataWithRange:NSMakeRange(0, 3)]]; NSData *timeEnd = [oneGroupData subdataWithRange:NSMakeRange(1, 2)]; [endDatebs appendData:timeEnd]; startDate = [self dataToString:startDatebs start:0 length:5]; endDate = [self dataToString:endDatebs start:0 length:5]; sleepTime = (int)[self pleaseInsertStarTime:startDate andInsertEndTime:endDate]; if(sleepTime < 0){ startDate = [self getLastDay:startDate]; sleepTime = (int)[self pleaseInsertStarTime:startDate andInsertEndTime:endDate]; } int type = 0; if (dataType == 1) { type = 2; } else if (dataType == 2) { type = 1; } day = [self dataToString:paramArray start:0 length:3]; NSString* sleepStr = [NSString stringWithFormat:@"%@|%d|%d|%@|%@|%d|%d", day, dataGroupLength, i+1, startDate, endDate, type, sleepTime]; NSLog(@"%@",sleepStr); dataType = *(int *)[oneGroupData subdataWithRange:NSMakeRange(0, 1)].bytes; deepTime = lightTime = awakeTime = sleepTime = 0; [startDatebs resetBytesInRange:NSMakeRange(0, [startDatebs length])]; [startDatebs setLength:0]; startDatebs = endDatebs; } } -(NSString *)dataToString:(NSData *)data start:(int)start length:(int)length{ NSData *dataDate = [data subdataWithRange:NSMakeRange(start, length)]; Byte *bytes = (Byte *)dataDate.bytes; NSString *stringDate; if(dataDate.length == 3){ stringDate = [self getStringFromArr:@[@(2000 + bytes[0]),@(bytes[1]),@(bytes[2])]]; }else if(dataDate.length == 6){ stringDate = [self getStringFromArr:@[@(2000 + bytes[0]),@(bytes[1]),@(bytes[2]),@(bytes[3]),@(bytes[4]),@(bytes[5])]]; }else if(dataDate.length == 5){ stringDate = [self getStringFromArr:@[@(2000 + bytes[0]),@(bytes[1]),@(bytes[2]),@(bytes[3]),@(bytes[4])]]; } return stringDate; } - (long)pleaseInsertStarTime:(NSString *)starTime andInsertEndTime:(NSString *)endTime{ NSDateFormatter* formater = [[NSDateFormatter alloc] init]; [formater setDateFormat:@"yyyy-MM-dd HH:mm"];//根据自己的需求定义格式 NSDate* startDate = [formater dateFromString:starTime]; NSDate* endDate = [formater dateFromString:endTime]; long time = (long)[endDate timeIntervalSinceDate:startDate]; long hour1 =((int)time)%(3600*24)/3600; long minute1 = ((int)time)%(3600*24)%3600/60; return hour1 * 60 + minute1; } - (NSString *)getLastDay:(NSString *)strDate{ NSDate *lastDay = [NSDate dateWithTimeInterval:-24*60*60 sinceDate:[self toYMDHMDate:strDate]]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; return [dateFormatter stringFromDate:lastDay]; } - (NSString *)getStringFromArr:(NSArray *)arr { NSString *strDate; if (arr.count == 3) { int year = [arr[0] intValue]; int month = [arr[1] intValue]; int day = [arr[2] intValue]; strDate = [NSString stringWithFormat:@"%d-%02d-%02d", year, month, day]; } else if(arr.count == 6) { int year = [arr[0] intValue]; int month = [arr[1] intValue]; int day = [arr[2] intValue]; int hour = [arr[3] intValue]; int minute = [arr[4] intValue]; int second = [arr[5] intValue]; strDate = [NSString stringWithFormat:@"%d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute , second]; } else if(arr.count == 4) { NSDate *now = [NSDate date]; int year = [self getFromDate:now type:1]; int month = [self getFromDate:now type:2]; int day = [self getFromDate:now type:3]; int hour = [arr[0] intValue]; int minute = [arr[1] intValue]; int second = [arr[2] intValue]; strDate = [NSString stringWithFormat:@"%d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second]; } else if(arr.count == 5){ int year = [arr[0] intValue]; int month = [arr[1] intValue]; int day = [arr[2] intValue]; int hour = [arr[3] intValue]; int minute = [arr[4] intValue]; strDate = [NSString stringWithFormat:@"%d-%02d-%02d %02d:%02d", year, month, day, hour, minute]; } return strDate; } - (NSDate *)toYMDHMDate:(NSString *)string { NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init]; [dateFormater setDateFormat: @"yyyy-MM-dd HH:mm"]; return [dateFormater dateFromString:string]; } - (int)getFromDate:(NSDate *)date type:(int)type { NSDateFormatter *formatter =[[NSDateFormatter alloc] init]; [formatter setTimeStyle:NSDateFormatterMediumStyle]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekday | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; NSDateComponents *comps = [calendar components:unitFlags fromDate:date]; switch (type) { case 1: return (int)[comps year]; break; case 2: return (int)[comps month]; break; case 3: return (int)[comps day]; break; case 4: return (int)[comps hour]; break; case 5: return (int)[comps minute]; break; case 6: return (int)[comps second]; break; case 7: return (int)([comps weekday] - 1); break; } return 0; } @end