概念
NSDate是Cocoa中用于处理日期和时间的基础类,该类封装了各种处理时间和日期的API(应用程序接口)。
NSDate
//初始化
//类初始化,获取系统当前时间(GMT 格林尼治时间,与北京时间相差8个小时,北京时间=GMT+8)
NSDate *date1=[NSDate date];
//<#(NSTimeInterval)#>这是一个以秒为单位的时间戳,float类型
//这个语法表示获得一个以现在时间为参考,通过设置<#(NSTimeInterval)#>(可输入正负数,负数表示之前多少秒、正数表示之后多少秒),来得到一个之前或者之后的时间
NSDate *date2=[NSDate dateWithTimeIntervalSinceNow:-120];
//从1970年开始,到时间戳的时间
`NSDate *date3=[NSDate dateWithTimeIntervalSince1970:100];
//距离sincedate(设置的日期)<#(NSTimeInterval)#>时间戳的时间
NSDate *date4=[NSDate dateWithTimeInterval:120 sinceDate:[NSDate date]];
//通过时间追加创建nsdate
NSDate *date5=[date4 dateByAddingTimeInterval:120];
//日期比较
//两个日期的时间戳(时间差)
创建一个时间对象然后跟1970年进行比较,并输出两者时间的差值
NSTimeInterval timeIterval=[[NSDate date] timeIntervalSince1970];
NSLog(@"%f",timeIterval);
创建一个时间对象然后跟系统当前时间进行比较,并输出两者时间的差值
NSTimeInterval timeItervalSinceNow=[[NSDate date] timeIntervalSinceNow];
NSLog(@"%f",timeItervalSinceNow);
//基于给到的时间,算出一个小时之前的时间
NSDate *dateNow=[NSDate date];
NSDate *dateHour=[dateNow dateByAddingTimeInterval:-3600];
NSDate *dateB=[NSDate dateWithTimeInterval:-3600 sinceDate:dateNow];
NSLog(@"%@",dateHour);
NSLog(@"%@",dateB);
//判断两个时间是否相等,实例方法,通过对象调用
BOOL b=[dateNow isEqualToDate:dateHour];
if (b) {
NSLog(@"dateB=dateHour");
}
//判断两个时间哪个是较早的日期
NSDate *earlierDate=[dateNow earlierDate:dateHour];
if ([dateHour isEqualToDate:earlierDate]) {
NSLog(@"dateHour是较早的时间");
}
else{
NSLog(@"dateNow是较早的日期");
}
//判断较晚的日期
NSDate *laterDate=[dateHour laterDate:dateNow];
if ([dateHour isEqualToDate :laterDate]) {
NSLog(@"dateHour是较晚的时间");
}
else{
NSLog(@"dateNow是较晚的日期");
}
//除了上面那种比较时间先后的方法,我们还可以是用compare方法,PS:compare 输出的是一个枚举
NSComparisonResult result=[dateNow compare:dateHour];
switch (result) {
case NSOrderedAscending://前者比后者小
{
NSLog(@"dateNow<dateHour");
break;
}
case NSOrderedSame://两者相同
{
NSLog(@"dateNow=dateHour");
break;
}
case NSOrderedDescending ://前者比后者大
{
NSLog(@"dateNow>dateHour");
break;
}
default:
break;
}
//通过NSTimeInterval创建一个时间很方便,但是不直观,Foundation框架为此提供了NSCalendar类,NSCalendar类由更自然的日期组成,例如日、月、年等,可以使用NSDateComponents来对具体的日、月、年等参数进行赋值。
// NSCalendar类通过NSDateComponents和 NSCalendar(currentCalendar方法)来创建一个date
NSCalendar *currentCalendar=[NSCalendar currentCalendar];
NSDateComponents *components=[[NSDateComponents alloc]init];
components.year=2016;
components.month=8;
components.day=12;
components.hour=12;
components.minute=15;
components.second=30;
NSDate *date8=[currentCalendar dateFromComponents:components];
//时区
// NSTimeZone
//列出所有的时区
NSArray *array=[NSTimeZone knownTimeZoneNames ];
//指定名称参数创建一个时区
NSTimeZone *timeZone=[NSTimeZone timeZoneWithName:@"Shanghai"];
//指定时区缩写 创建一个时区
NSTimeZone *timeChina=[ NSTimeZone timeZoneWithAbbreviation:@"PRC"];
//如何将日期转成字符串
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 *str=[dateFormatter stringFromDate:[NSDate date]];
//将字符串转成日期
NSString *str2=@"1970-1-1 10:00:00";
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date10=[dateFormatter dateFromString:str2];
NSLog(@"%@",date10);