test.m 6.74 KB
//
//  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