iOS時間類型轉換和各種數據類型進行轉換

jopen 9年前發布 | 1K 次閱讀 Objective-C IOS

這次分享一些數據類型還有時間類型的各種轉換方法,有詳細注釋,話不多說,直接上代碼

/**

  • 時間轉換部分 //從1970年開始到現在經過了多少秒 -(NSString )getTimeSp { NSString time; NSDate fromdate=[NSDate date]; time = [NSString stringWithFormat:@"%f",[fromdate timeIntervalSince1970]]; return time; }

    //將時間戳轉換成NSDate,轉換的時間我也不知道是哪國時間,應該是格林尼治時間 -(NSDate )changeSpToTime:(NSString)spString { NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[spString intValue]]; NSLog(@"%@",confromTimesp); return confromTimesp; }

    //將時間戳轉換成NSDate,加上時區偏移。這個轉換之后是北京時間 -(NSDate)zoneChange:(NSString)spString { NSDate confromTimesp = [NSDate dateWithTimeIntervalSince1970:[spString intValue]]; NSTimeZone zone = [NSTimeZone systemTimeZone]; NSInteger interval = [zone secondsFromGMTForDate:confromTimesp]; NSDate *localeDate = [confromTimesp dateByAddingTimeInterval: interval]; NSLog(@"%@",localeDate); return localeDate; }

    //比較給定NSDate與當前時間的時間差,返回相差的秒數 -(long)timeDifference:(NSDate )date { NSDate localeDate = [NSDate date]; long difference =fabs([localeDate timeIntervalSinceDate:date]); return difference; }

    //將NSDate按yyyy-MM-dd HH:mm:ss格式時間輸出 -(NSString)nsdateToString:(NSDate )date { NSDateFormatter dateFormat=[[NSDateFormatter alloc]init]; [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString string=[dateFormat stringFromDate:date]; NSLog(@"%@",string); return string; }

    //將yyyy-MM-dd HH:mm:ss格式時間轉換成時間戳 -(long)changeTimeToTimeSp:(NSString )timeStr { long time; NSDateFormatter format=[[NSDateFormatter alloc] init]; [format setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *fromdate=[format dateFromString:timeStr]; time= (long)[fromdate timeIntervalSince1970]; NSLog(@"%ld",time); return time; }

    //獲取當前系統的yyyy-MM-dd HH:mm:ss格式時間 -(NSString )getTime { NSDate fromdate=[NSDate date]; NSDateFormatter dateFormat=[[NSDateFormatter alloc]init]; [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString string=[dateFormat stringFromDate:fromdate]; return string; }

    //將當前時間轉化為年月日格式 -(NSString )changeDate { NSDate date = [NSDate date]; NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

    NSDateComponents *comps = [calendar components:unitFlags fromDate:date]; NSInteger year = [comps year]; NSInteger month = [comps month]; NSInteger day = [comps day]; NSInteger hour = [comps hour]; NSInteger min = [comps minute]; NSInteger sec = [comps second];

    NSString *string = [NSString stringWithFormat:@"%d年%d月%d日%d時%d分%d秒",year,month,day,hour,min,sec];

    NSLog(@"%@",string); return string; }

    */

//發送數據時,16進制數->Byte數組->NSData,加上校驗碼部分 -(NSData )hexToByteToNSData:(NSString )str { int j=0; Byte bytes[[str length]/2]; ////Byte數組即字節數組,類似于C語言的char[],每個漢字占兩個字節,每個數字或者標點、字母占一個字節 for(int i=0;i<[str length];i++) { /**

     *  在iphone/mac開發中,unichar是兩字節長的char,代表unicode的一個字符。
     *  兩個單引號只能用于char。可以采用直接寫文字編碼的方式來初始化。采用下面方法可以解決多字符問題
     */
    int int_ch;                                     ///兩位16進制數轉化后的10進制數
    unichar hex_char1 = [str characterAtIndex:i];   ////兩位16進制數中的第一位(高位*16)

    int int_ch1;
    if(hex_char1 >= '0' && hex_char1 <='9')
    {
        int_ch1 = (hex_char1-48)*16;                //// 0 的Ascll - 48
    }
    else if(hex_char1 >= 'A' && hex_char1 <='F')
    {
        int_ch1 = (hex_char1-55)*16;                //// A 的Ascll - 65
    }
    else
    {
        int_ch1 = (hex_char1-87)*16;                //// a 的Ascll - 97
    }

    i++;

    unichar hex_char2 = [str characterAtIndex:i];   ///兩位16進制數中的第二位(低位)
    int int_ch2;
    if(hex_char2 >= '0' && hex_char2 <='9')
    {
        int_ch2 = (hex_char2-48);                   //// 0 的Ascll - 48
    }
    else if(hex_char2 >= 'A' && hex_char2 <='F')
    {
        int_ch2 = hex_char2-55;                     //// A 的Ascll - 65
    }
    else
    {
        int_ch2 = hex_char2-87;                     //// a 的Ascll - 97
    }

    int_ch = int_ch1+int_ch2;
    bytes[j] = int_ch;                              ///將轉化后的數放入Byte數組里

// if (j==[str length]/2-2) { // int k=2; // int_ch=bytes[0]^bytes[1]; // while (k // int_ch=int_ch^bytes[k]; // k++; // } // bytes[j] = int_ch; // }

    j++;
}
NSData *newData = [[NSData alloc] initWithBytes:bytes length:[str length]/2 ];
NSLog(@"%@",newData);
return newData;

} //接收數據時,NSData->Byte數組->16進制數 -(NSString )NSDataToByteTohex:(NSData )data { Byte bytes = (Byte )[data bytes]; NSString hexStr=@""; for(int i=0;i<[data length];i++) { NSString newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16進制數,與 0xff 做 & 運算會將 byte 值變成 int 類型的值,也將 -128~0 間的負值都轉成正值了。 if([newHexStr length]==1) { hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr]; } else { hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr]; } } NSLog(@"hexStr:%@",hexStr); return hexStr; } //將漢字字符串轉換成16進制字符串 -(NSString )chineseToHex:(NSString)chineseStr { NSStringEncoding encodingGB18030= CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSData responseData =[chineseStr dataUsingEncoding:encodingGB18030 ]; NSString string=[self NSDataToByteTohex:responseData]; NSLog(@"%@",string); return string; } //將漢字字符串轉換成UTF8字符串 -(NSString )chineseToUTf8Str:(NSString)chineseStr { NSStringEncoding encodingUTF8 = NSUTF8StringEncoding; NSData responseData2 =[chineseStr dataUsingEncoding:encodingUTF8 ]; NSString string=[self NSDataToByteTohex:responseData2]; return string; } //將十六進制字符串轉換成漢字 -(NSString)changeLanguage:(NSString)chinese { NSString strResult; NSLog(@"chinese:%@",chinese); if (chinese.length%2==0) { //第二次轉換 NSData newData = [self hexToByteToNSData:chinese]; unsigned long encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); strResult = [[NSString alloc] initWithData:newData encoding:encode]; NSLog(@"strResult:%@",strResult); } else { NSString strResult = @"已假定是漢字的轉換,所傳字符串的長度必須是4的倍數!"; NSLog(@"%@",strResult); return NULL; } return strResult; } /////////////GBK,漢字,GB2312,ASCII碼,UTF8,UTF16 //UTF8字符串轉換成漢字 -(NSString)changeLanguageUTF8:(NSString)chinese { NSString strResult; NSData data=[self hexToByteToNSData:chinese]; strResult=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; return strResult; } //將十進制數轉換成十六進制 -(NSString )ToHex:(int)tmpid { NSString nLetterValue; NSString str =@""; long long int ttmpig; for (int i = 0; i<9; i++) { ttmpig=tmpid%16; tmpid=tmpid/16; switch (ttmpig) { case 10: nLetterValue =@"A";break; case 11: nLetterValue =@"B";break; case 12: nLetterValue =@"C";break; case 13: nLetterValue =@"D";break; case 14: nLetterValue =@"E";break; case 15: nLetterValue =@"F";break; default:nLetterValue=[[NSString alloc]initWithFormat:@"%lli",ttmpig];

    }
    str = [nLetterValue stringByAppendingString:str];
    if (tmpid == 0)
    {
        break;
    }

}
return str;

}

//Unicode轉化為漢字

  • (NSString )replaceUnicode1:(NSString )unicodeStr { NSString tempStr1 = [unicodeStr stringByReplacingOccurrencesOfString:@"\u" withString:@"\U"]; NSString tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\""]; NSString tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""]; NSData tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding]; NSString* returnStr = [NSPropertyListSerialization propertyListFromData:tempData

                                                         mutabilityOption:NSPropertyListImmutable
                                                                   format:NULL
                                                         errorDescription:NULL];
    
    

    NSLog(@"%@",[returnStr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"\n"]);

    return [returnStr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"\n"]; }

//iso8859-1 到 unicode編碼轉換 iso8859-1字符編碼的一種 /*

  • (NSString )changeISO88591StringToUnicodeString:(NSString )iso88591String { NSMutableString srcString = [[NSMutableString alloc]initWithString:iso88591String]; [srcString replaceOccurrencesOfString:@"&" withString:@"&" options:NSLiteralSearch range:NSMakeRange(0, [srcString length])]; [srcString replaceOccurrencesOfString:@"&#x" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [srcString length])]; NSMutableString desString = [[NSMutableString alloc]init]; NSArray *arr = [srcString componentsSeparatedByString:@";"]; //將字符串切割成數組 for(int i=0;i<[arr count]-1;i++) {
      NSString *v = [arr objectAtIndex:i];
      char *c = malloc(3);
      int value = [StringUtil changeHexStringToDecimal:v];//將二進制轉化為十進制
      c[1] = value  &0x00FF;
      c[0] = value >>8 &0x00FF;
      c[2] = '\0';
      [desString appendString:[NSString stringWithCString:c encoding:NSUnicodeStringEncoding]];
      free(c);
    
    } return desString; } */ </pre>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!