判断给定的时间是否是今天,如果是今天,则显示分和秒,如果是今年,则显示月日时分秒,否则显示年月日时分秒
- (NSString *)translateDateFormWithLastUpdatedTime:(NSDate *)lastUpdatedTime
{
//判断给定的时间是否是今天,如果是今天,则显示分和秒,如果是今年,则显示月日时分秒,否则显示年月日时分秒
NSCalendar *calendar = [self currentCalendar];
NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
// 2.格式化日期
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
BOOL isToday = NO;
if ([cmp1 day] == [cmp2 day]) { // 今天
formatter.dateFormat = @" HH:mm";
isToday = YES;
} else if ([cmp1 year] == [cmp2 year]) { // 今年
formatter.dateFormat = @"MM-dd HH:mm";
} else {
formatter.dateFormat = @"yyyy-MM-dd HH:mm";
}
NSString *time = [formatter stringFromDate:lastUpdatedTime];
return time;
}
#pragma mark - 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。
- (NSCalendar *)currentCalendar {
if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
}
return [NSCalendar currentCalendar];
}
计算文字的宽度,给UILabel
添加分类,具体代码如下
- (CGFloat)mj_textWith {
CGFloat stringWidth = 0;
CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
if (self.text.length > 0) {
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
stringWidth =[self.text
boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:self.font}
context:nil].size.width;
#else
stringWidth = [self.text sizeWithFont:self.font
constrainedToSize:size
lineBreakMode:NSLineBreakByCharWrapping].width;
#endif
}
return stringWidth;
}
过期提醒,来源于明杰的下拉刷新库
// 过期提醒
#define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
ios
float
类型四舍五入的方法
(floorf(bonusRate*100 + 0.5))/100
导航栏上移20像素的解决方案
- 在
info.plist
文件中将View controller-based status bar appearance
设置为YES
- 在出现问题的控制器中添加如下代码
- (BOOL)prefersStatusBarHidden
{
return NO;
}
16进制CRC校验算法
unsigned short tmp = 0xffff;
unsigned short ret1 = 0;
unsigned char buff[10] = {0};
buff[0] = 0xFE;
buff[1] = 0x01;
buff[2] = 0x00;
buff[3] = 0x00;
buff[4] = 0x00;
buff[5] = 0x00;
buff[6] = 0x00;
buff[7] = 0x00;
buff[8] = 0x00;
buff[9] = 0x00;
for(int n = 0; n < 10; n++){/*此处的6 -- 要校验的位数为6个*/
tmp = buff[n] ^ tmp;
for(int i = 0;i < 8;i++){ /*此处的8 -- 指每一个char类型又8bit,每bit都要处理*/
if(tmp & 0x01){
tmp = tmp >> 1;
tmp = tmp ^ 0xa001;
}
else{
tmp = tmp >> 1;
}
}
}
/*CRC校验后的值*/
printf("%X\n",tmp);
/*将CRC校验的高低位对换位置*/
ret1 = tmp >> 8;
ret1 = ret1 | (tmp << 8);
printf("ret: %X\n",ret1);
OC中16进制转浮点数方法
NSString *temp = [NSString stringWithFormat:@"%@%@",@"0x",[[[temp0 stringByAppendingString:temp1] stringByAppendingString:temp2] stringByAppendingString:temp3]];
const char *str = NULL;
if ([temp canBeConvertedToEncoding:NSUTF8StringEncoding]) {
str = [temp cStringUsingEncoding:NSUTF8StringEncoding];
}
unsigned long num;
char * leftover;
num = strtoul(str, &leftover, 0);
float result = Hex2Float(num);
printf("result = %f \n",result);
//十六进制数转浮点数通用方法
float Hex2Float(unsigned long number)
{
unsigned int sign = (number & 0x80000000) ? -1 : 1;
unsigned int exponent = ((number >> 23) & 0xff) - 127;
float mantissa = 1 + ((float)(number & 0x7fffff) / 0x7fffff);
return sign * mantissa * pow(2, exponent);
}
OC中将16进制字符串转换为NSData的方法
- (NSData *)convertHexStrToData:(NSString *)str
{
if (!str || [str length] == 0) {
return nil;
}
NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:20];
NSRange range;
if ([str length] % 2 == 0) {
range = NSMakeRange(0, 2);
} else {
range = NSMakeRange(0, 1);
}
for (NSInteger i = range.location; i < [str length]; i += 2) {
unsigned int anInt;
NSString *hexCharStr = [str substringWithRange:range];
NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
[scanner scanHexInt:&anInt];
NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
[hexData appendData:entity];
range.location += range.length;
range.length = 2;
}
return hexData;
}
OC中将NSData转换为16进制字符串的方法
- (NSString *)convertDataToHexStr:(NSData *)data
{
if (!data || [data length] == 0) {
return @"";
}
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
[data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
unsigned char *dataBytes = (unsigned char*)bytes;
for (NSInteger i = 0; i < byteRange.length; i++) {
NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
if ([hexStr length] == 2) {
[string appendString:hexStr];
} else {
[string appendFormat:@"0%@", hexStr];
}
}
}];
return string;
}
网友评论