最好用的,笔者使用最多的。之前项目给设备校准时间使用
一、格林尼治时间
//校准开关时间
- (void)setSwitchTimes{
NSDate *date = [NSDate date];
NSCalendar *currentCalendar = [NSCalendar currentCalendar]; //IOS 8 之后
NSUInteger integer = NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday;
NSDateComponents *dataCom = [currentCalendar components:integer fromDate:date];
UInt8 controlCode = 0x01;
NSNumber *A = [NSNumber numberWithUnsignedInteger:[dataCom year] % 100];
NSNumber *B = [NSNumber numberWithUnsignedInteger:[dataCom month]];
NSNumber *C = [NSNumber numberWithUnsignedInteger:[dataCom day]];
NSNumber *D = [NSNumber numberWithUnsignedInteger:[dataCom hour]];
NSNumber *E = [NSNumber numberWithUnsignedInteger:[dataCom minute]];
NSNumber *F = [NSNumber numberWithUnsignedInteger:[dataCom second]];
NSNumber *G = [NSNumber numberWithUnsignedInteger:[dataCom weekday]];
//区分 星期天、星期一…星期六
switch ([G intValue]) {
case 1:
G = [NSNumber numberWithInt: 0x01];
break;
case 2:
G = [NSNumber numberWithInt: 0x02];
break;
case 3:
G = [NSNumber numberWithInt: 0x04];
break;
case 4:
G = [NSNumber numberWithInt: 0x08];
break;
case 5:
G = [NSNumber numberWithInt: 0x10];
break;
case 6:
G = [NSNumber numberWithInt: 0x20];
break;
case 7:
G = [NSNumber numberWithInt: 0x40];
break;
default:
break;
}
NSArray *data = @[@0xFC,@0x11,@0x01,@0x01,A,B,C,D,E,F,G];
[self.device sendData69With:controlCode mac:self.device.mac data:data];
}
二、不同时间形式的获取,主要靠NSDateFormatter这个类的对象的设置。例如,如果还想要获得“ 9:00AM”的形式,可以设置其格式为“hh:mmaaa”等
1、以NSString形式获取当前时间
-(NSString*)getCurrentTimes{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
//现在时间,你可以输出来看下是什么格式
NSDate *datenow = [NSDate date];
//----------将nsdate按formatter格式转成nsstring
NSString *currentTimeString = [formatter stringFromDate:datenow];
NSLog(@"currentTimeString = %@",currentTimeString);
return currentTimeString;
}
2、分别单独获得年、月、日 之后依次类推
NSDate *date =[NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy"];
NSInteger currentYear=[[formatter stringFromDate:date] integerValue];
[formatter setDateFormat:@"MM"];
NSInteger currentMonth=[[formatter stringFromDate:date]integerValue];
[formatter setDateFormat:@"dd"];
NSInteger currentDay=[[formatter stringFromDate:date] integerValue];
NSLog(@"currentDate = %@ ,year = %ld ,month=%ld, day=%ld",date,currentYear,currentMonth,currentDay);
3、获取星期几:
这里我是封装了一个方法,代码如下:
-(void)setDate{
NSDate *date =[NSDate date];
//获取星期几
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [[NSDateComponents alloc] init];
NSInteger unitFlags = NSCalendarUnitWeekday ;
comps = [calendar components:unitFlags fromDate:date];
NSInteger week = [comps weekday];
NSLog(@"week == %zd",week);
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy"];
NSString *currentYear=[formatter stringFromDate:date];
[formatter setDateFormat:@"MM"];
NSString *currentMonth=[formatter stringFromDate:date];
self.monthAndYearLabel.text=[NSString stringWithFormat:@"%@/%@",currentMonth,currentYear];
[formatter setDateFormat:@"dd"];
NSString *currentDay=[formatter stringFromDate:date];
self.dayLabel.text = currentDay;
switch (week) {
case 1:
self.weekdayLabel.text = @"星期日";
break;
case 2:
self.weekdayLabel.text = @"星期一";
break;
case 3:
self.weekdayLabel.text = @"星期二";
break;
case 4:
self.weekdayLabel.text = @"星期三";
break;
case 5:
self.weekdayLabel.text = @"星期四";
break;
case 6:
self.weekdayLabel.text = @"星期五";
break;
case 7:
self.weekdayLabel.text = @"星期六";
break;
default:
self.weekdayLabel.text = @"";
break;
}
}