太官方的解释我不写了,我就按我目前自己的理解;
NSDate类是一个绝对的时间。它就是一个时间点,它是进行日历计算的基础。
//******1.创建一个当前时间:是一个格林威治标准时间,本初子午线穿过的地方,经度为0的地方
NSDate *date = [NSDate date];
NSLog(@"%@",date);//打印 0时区的时间
//******2.日期间的比较
// NSString *str1 = @"1987-1-21 10:10:10 ";
NSString *str2 = @"2015-10-1 12:12:12 ";
NSDate *datestr2 = [fmt dateFromString:str2];
NSLog(@"%@",datestr2);
//2.1使用compare方法 返回一个枚举
NSComparisonResult rs = [datestr1 compare:datestr2];
if (rs == NSOrderedSame) {
NSLog(@"日期相同");
}else if (rs == NSOrderedDescending){
NSLog(@"datestr1 > datestr2");
}else{
NSLog(@"datestr1 < datestr2");
}
//2.2 找出较早的日期
NSDate *earlierDate = [datestr1 earlierDate:datestr2];
NSLog(@"%@",earlierDate);
//2.3 找出较晚的日期
NSDate *laterDate = [datestr2 laterDate:datestr1];
NSLog(@"%@",laterDate);
//2.4 得出一个离现在距离多少秒的一个时间 Interval:间隔
NSTimeInterval time = 20; //是一个double的别名 时间间隔 基本单位为秒
NSLog(@"%lf",time);
NSDate *dateNew = [NSDate dateWithTimeIntervalSinceNow:time];
NSLog(@"%@",dateNew);
NSDateFomatter类是一个日历类,它默认以公历(即阳历)为参考,它可以设置日期的表现格式,可以转NSString和NSDate。
//2.日期格式化的对象
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];//创建一个对象
NSLog(@"%@",fmt.dateFormat);
fmt.dateFormat = @"yyyy-MM-dd hh:mm:ss ";//设置日期的格式化方式
// yyyy:年 MM:月 dd:日 hh或HH:24小时制 mm:分 ss:秒
// z:GMT+8 Z:+0800 都表示时区,方式不同
//3.日期转格式化字符串
NSString *strDate = [fmt stringFromDate:date];
NSLog(@"%@",strDate);
//4.日期字符串转NSDate
NSString *str1 = @"1987-1-21 10:10:10 ";
NSDate *datestr1 = [fmt dateFromString:str1]; //返回的还是一个0时区的date
NSLog(@"%@",datestr1);
NSCalendar类把世界上现存的常用的历法进行了封装,既提供了不同历法的时间信息,又支持日历的计算
NSDateComponents类是一个保存日期的组成部分,包括年、月、日、星期、等等。它可以算作一个日期的数据库。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//******NSCalendar 日历,主要用于日期的计算
//******NSDateComponents 用来存放日期的组成部分
//1.创建一个现在的日历,得到的是中国的公历 current:现在的、当前的 (获得当前的逻辑时间)
NSCalendar *calendar = [NSCalendar currentCalendar];
// NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *date = [NSDate date];
//2.通过日历的方法,得到时间的每一个部分---自动计算时区
NSDateComponents *cp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour fromDate:date];
NSLog(@"%zd-%zd-%zd-%zd",cp.year,cp.month,cp.day,cp.hour);
//3.计算2个时间的差值,NSCalendarUnitYear计算年的差值
NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:60];//创建一个时间
NSLog(@"%@",date2);
//NSCalendarMatchStrictly:严格匹配
NSDateComponents *cp2 = [calendar components:NSCalendarUnitYear fromDate:date2 toDate:date options:NSCalendarMatchStrictly];
cp2.month = 20;//可以通过点语法赋值
NSLog(@"%zd-%zd",cp2.year,cp2.month);//打印45-20
//4.NSCalendar 转 NSDate
cp.year = 2015;
cp.month = 12;
cp.day = 16;
cp.hour = 20;
NSDate *date3 = [calendar dateFromComponents:cp];
NSLog(@"%@",date3);
//5.当前的日期加上一个时间
NSDate *dateNow = [NSDate date];
NSLog(@"%@",dateNow);
NSDateComponents *comp = [[NSDateComponents alloc] init];
comp.year = 2;
comp.month = 3;
//加上2年3个月
NSDate *dateNew = [calendar dateByAddingComponents:comp toDate:dateNow options:NSCalendarMatchStrictly];
NSLog(@"%@",dateNew);
}
return 0;
}