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++)
{
} return desString; } */ </pre>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);