这次分享一些数据类型还有时间类型的各种转换方法,有详细注释,话不多说,直接上代码
/**
* 时间转换部分
*
//从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;
}
*/