缓冲区和日期
前言
我们在读写文件或下载时,都需要频繁的将数据读入一个临时存储区,她通称为缓冲区。而我们在看qq动态或朋友圈,甚至在看很多文章的时候,我们都可以看到日期的应用。这两个是程序应用在实践中重要的数据类型。
缓冲区
1计算中文件分为哪几种?
二进制文件 和文本文件,其中图片、视频、音频等就是二进制文件,.txt的文件就是文本文件。
2.客户端与服务器端,或者客户端与客户端数据交流(二进制)字节流,在OC中,用什么类储存字节? 即NSData 类在NSData 类中,尤其是实例化对象,此对象包含了大量的字节,这些字节就是我们客户端想要的信息
不可变NSData
初始化
创建一个空的data
NSData *data1=[NSData data];
将字符串转换成NSData
注意:使用const关键字来将一个变量变为常量,const修饰的常量也称为‘命名常量’或者‘符号常量’
const char *str="Hello";
NSData *data2=[NSData dataWithBytes:str length:strlen(str)];
NSString *string=@"你好吗";
NSData *data3=[string dataUsingEncoding:NSUTF8StringEncoding];
将本地文件中的数据转换成data
NSData *data4 = [NSData dataWithContentsOfFile:@"/Users/macpro/Desktop/oc/OC-010/OC-010/8EDD2DE79FF1553E50C64DCCB261BDE8.jpg"];
NSLog(@"%@",data4);
将数据写入本地文件
BOOL flag=[data4 writeToFile:@"/Users/macpro/Desktop/angelbaby.png" atomically:YES];
if (flag) {
NSLog(@"写入成功");
}
求Data 的字节长度
NSUInteger length=data4.length;
NSLog(@"%lu",length);
可变NSMutableData
创建一个空的data ,NSMutableData
NSMutableData *mData=[NSMutableData data];
增加data
[mData appendData:data4];
日期NSDate
在OC中,Foundation框架为我们提供了强大的时间操作类‘NSDate’,该类封装了各种处理时间和日期的API
获取系统当前时间(GMT 格林尼治时间,与北京之间相差了八个小时,北京时间 =GMT+8)
NSDate *date1=[NSDate date];
NSLog(@"%@",date1);
时间搓
(NSTimeInterval)是一个以秒为单位的时间片,也叫时间搓
距离现在日期timeIntval时间戳的时间
NSDate *date2=[NSDate dateWithTimeIntervalSinceNow:120];
NSLog(@"%@",date2);
距离1970.1.1日期timeIntval时间搓的时间
NSDate *date3=[NSDate dateWithTimeIntervalSince1970:120];
NSLog(@"%@",date3);
距离 sinceDate日期timeIntval时间搓的时间
NSDate *date4=[NSDate dateWithTimeInterval:120 sinceDate:[NSDate date]];
NSLog(@"%@",date4);
通过时间追加创建NSDate
NSDate *date5=[date4 dateByAddingTimeInterval:120];
NSLog(@"%@",date5);
日期比较
用时间搓比较date和1970年,现在的时间差(秒表示)
NSTimeInterval timeIntervalSince1970=[[NSDate date]timeIntervalSince1970];
NSLog(@"timeIntervalSince1970= %f",timeIntervalSince1970);
NSTimeInterval timeIntervalSinceNow=[[NSDate date]timeIntervalSinceNow];
NSLog(@"timeIntervalSinceNow= %f",timeIntervalSinceNow);
用dateNow earlierDate和dateNow laterDate比较
NSDate *dateNow=[NSDate date];
NSDate *dateHourAgo=[dateNow dateByAddingTimeInterval:-3600];
NSLog(@"%@",dateHourAgo);
BOOL flag=[dateNow isEqualToDate:dateHourAgo];
if (flag) {
NSLog(@"dateNow =dateHourAgo");
}
NSDate *date6=[dateNow earlierDate:dateHourAgo];
if ([date6 isEqualToDate:dateHourAgo]) {
NSLog(@"dateHourAgo 是较早时间");
}
else{
NSLog(@"dateNow 是较早的时间");
}
NSDate *date7=[dateNow laterDate:dateHourAgo];
if ([date7 isEqualToDate:dateNow]) {
NSLog(@"dateNow 是较晚的时间");
}
else{
NSLog(@"dateHourAgo 是较晚的时间");
}
用compare 方法返回枚举值比较时间
NSComparisonResult comparisonResult=[dateNow compare:dateHourAgo];
switch(comparisonResult){
case NSOrderedAscending:{
NSLog(@"dateNow < dateHourAgo");
break;
}
case NSOrderedSame:{
NSLog(@"dateNow = dateHourAgo");
break;
}
case NSOrderedDescending:{
NSLog(@"dateNow > dateHourAgo");
break;
}
}
日历具体时间的输入NSCalendar\NSDateComponents
为了让我们要输出具体年月日更加直观方便,我们可以用NSCalendar和NSDateComponents
NSCalendar *currentCalendar =[NSCalendar currentCalendar];
NSDateComponents *components =[[NSDateComponents alloc]init];
components.year=2016;
components.month=8;
components.day=12;
components.hour=12;
components.minute=14;
components.second=10;
NSDate *date8=[currentCalendar dateFromComponents:components];
NSLog(@"%@",date8);
时区(NSTimeZone)
列出所有的时区
NSArray *array=[NSTimeZone knownTimeZoneNames];
NSLog(@"array= %@",array);
指定名称参数创建一个时区
[NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
指定时区缩写创建一个时区
NSTimeZone *timeZone2 = [NSTimeZone timeZoneWithAbbreviation:@"PRC"];
如何将字符串转换成Data类型
NSDateFormatter *dateFormatter = [NSDateFormatter new];
设置时区(默认时区)
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
设置时间输出格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];
NSString *string1=[dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@",string1);
如何将字符串转换成NSDate类型
NSString *string2=@"1970-08-12 16:08:00";
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date9 = [dateFormatter dateFromString:string2];
NSLog(@"%@",date9);
NSTimeInterval timeInterval = date9.timeIntervalSinceNow;
NSLog(@"%f",-timeInterval);
int n = (int)-timeInterval/60;
NSTimeInterval timeInterval2 = [[NSDate date] timeIntervalSince1970];
NSLog(@"%f",timeInterval2);