计算机中的文件分为“二进制文件”和“文本文件”,其中图片、视频、音频等就是二进制文件,像“.txt”的文件就是文本文件。客户端与服务器端,或者客户端与客户端数据交流的格式为二进制(字节流)。在OC中使用‘NSData’类储存这些字节,在NSData类中,由实例化的对象,此对象包含了大量的字节,这些字节就是客户端想要的重要信息。
NSData
我们在读写文件或下载数据时,都需要频繁的将数据读入一个临时存储区,它通常称为缓冲区。NSData用来设置缓冲区、将文件的内容读入缓冲区,或将缓冲区的内容写到一个文件。
创建一个空的NSData
NSData *data1 = [NSData data];
将c字符串转换成NSData
const char *str = "Hello";
NSData *data2 = [NSData dataWithBytes:str length:strlen(str)];
将OC中的字符串转换成NSData
NSString *string1 = @"你好吗";
NSData *data3 = [string1 dataUsingEncoding:NSUTF8StringEncoding];
将本地文件中的数据转换成data
NSData *data4 = [NSData dataWithContentsOfFile:@"/Users/ibokan/Desktop/homework/NSData/NSData/8EDD2DE79FF1553E50C64DCCB261BDE8.jpg"];
将数据写入本地文件
BOOL flag = [data4 writeToFile@"/Users/ibokan/Desktop/anglelababy.png" atomically:YES];
if(flag){
NSLog(@"写入成功");
}//
//结果在桌面写入了由data4中数据所组成的一张图片
求data的字节长度
NSUInteger length = data.length;
NSLog("%u",length);//NSUInteger对应%u
创建一个空的mData,NSMutableData
NSMutableData *mData = [NSMutableData data];
对mData的操作,增加data4
[mData appendData:data4];
NSDate
NSDate是用于处理日期和时间的基础类,用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差运算和日期运算之间的早晚比较等。NSDate是一个封装了某一给定时刻的类,包括日期和时间。
创建NSDate对象
NSDate *date1 = [NSDate date];
//date1得到的时间是系统当前GMT时间,北京时间 = GMT + 8
NSTimeInterval是一个以秒为单位的时间片,也叫时间戳
NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:120];//表示从现在起120秒之后,如果是负号,则表示从现在起120秒之前
距离1970.01.01日期 NSTimeInterval 时间戳的时间
NSDate *date3 = [NSDate dateWithTimeIntervalSince1970:120];//表示获取计算机开始时间,即1970-01-01 00:00:00 后120秒,即date3 = 1970-01-01 00:02:00 +0000
距离sinceDate日期 NSTimeInterval 时间戳的时间
NSDate *date4 = [NSDate dateWithTimeInterval:120 sinceDate:[NSDate date]];
通过时间追加创建date5
NSDate *date5 = [date4 dateByAddingTimeInterval:120];//相当于date5 = date4 + 120S
日期的比较
NSTimeInterval timeIntervalSince1970 = [[NSDate date] timeIntervalSince1970];//表示从1970到当前的时间戳
NSTimeInterval timeIntervalSinceNow = [[NSDate date] timeIntervalSinceNow];
基于给出时间,算出1个小时之前的时间
NSDate *dateNow = [NSDate date];
NSDate *dateHourAgo = [dateNow dateByAddingTimeInterval:-3600];
判断两个日期是否相等
BOOL flag = [dateNow isEqualToDate:dateHourAgo];
if(flag){
NSLog(@"两者相等");
}
else{
NSLog(@"两者不相等");
}
两个日期比较,返回较早的日期再赋值给date7
NSDate *date7 = [dateNow earlierDate:dateHourAgo];
if([date7 isEqualToDate:dateHourAgo]){
NSLog(@"dateHourAgo是较早的日期");
}
else{
NSLog(@"dateNow是较早的日期");
}
同理,也可以返回较晚的日期
NSDate *date8 = [dateNow laterDate:dateHourAgo];//date8得到的是dateNow
使用NSComparisonReslut进行比较
NSComparisonResult comparisonReslut = [dateNow compare:dateHourAgo];
switch(comparisonResult){
case NSOrderedAscending:
NSLog(@"dateHourAgo < dateNow");
break;
case NSOrderedSame:
NSLog(@"dateHourAgo = dateNow");
break;
case NSOrderenDescending:
NSLog(@"dateHourAgo > dateNow");
}
日历(NSCalendar)的创建
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 *date9 = [currentCalendar dateFromComponents:components];
时区 NSTimeZone
NSArray *array = [NSTimeZone knownZoneNames];//列出所有的时区,并放入一个数组中
//指定名称参数创建一个时区
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
//指定时区缩写创建一个时区
NSTimeZone *timeZone2 = [NSTimeZoneWithAbbreviatio@"PRC"];
NSDateFormatter,将NSDate转换成字符串类型
NSDateFormatter *dateFormatter = [NSDateFormatter new];
//设置默认时区,转换成本地时区
dateFormatter.timeZone = [NSTimeZone defaultTimeZone];
//设置时间输出格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//转换成字符串
NSString *string1 = [dateFormatter stringFromDate:[NSDare date]];
将字符串转换成NSDate类型
//创建一个字符串
NSString *string2 = @"1970-01-01 08:00:00";
//设置时区
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
//设置格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate date10 = [dateFormatter dateFromString:string2];
//时间戳timeInterval
NSTimeInterval timeInterval = date10.timeIntervalSinceNow;
NSLog(@"%f",-timeInterval);//现在比date10早,timeInterval为负,所有加‘-’使其输出为正
//把秒变为分钟
int m = (int)-timeInterval/60;