在开发过程中,我们经常会遇到一些跟时间处理相关的工作,比如说,时间的比较,加减,格式化,NSString <----> NSDate, NSDate <---> NSCanlendar等等。今天我们来做个整理,理个头绪。方便我们自己记忆。--->---->
NSDate 介绍
- NSDate对象用来表示一个具体的时间点;
- NSDate是一个类簇。我们所使用的NSDate对象,都是NSDate的私有之类的实体;
- NSDate储存的是GMT时间,使用的时候会根据当前应用指定的时区进行时间上的增减,以供计算或显示。
方法的使用:
- 类方法初始化
//返回当前时间(获取的是GMT时间,需要获取某个时区的时间,看常用方法)
+(instancetype)date;
//返回以当前时间为基准,然后过了secs秒的时间
+(instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
//返回以2001-01-01 GMT为基准,然后过了secs秒的时间
+(instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti;
//返回以1970-01-01 GMT为基准,然后过了secs秒的时间
+(instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;
//返回以date时间为基准,过了secsToBeAdded秒的时间
+(instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;
- 实例方法初始化`objc
 //初始化当前时间(获取的是GMT时间,需要获取某个时区的时间,看常用方法)
- (instancetype)init;
//初始化以当前时间为基准,然后过了secs秒的时间
- (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
//初始化以1970-01-01 GMT为基准,然后过了secs秒的时间
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)secs;
//初始化以date时间为基准,过了secsToBeAdded秒的时间
- (instancetype)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;`
- 时间之间的比较`objc
 //与anotherDate比较,返回较早的那个日期
- (NSDate )earlierDate:(NSDate )anotherDate;
//与anotherDate比较,返回较晚的那个日期
- (NSDate )laterDate:(NSDate )anotherDate;
/该方法用于排序时调用:
  当实例保存的日期值与anotherDate相同时返回NSOrderedSame
  当实例保存的日期值晚于anotherDate时返回NSOrderedDescending
  当实例保存的日期值早于anotherDate时返回NSOrderedAscending /
- (NSComparisonResult)compare:(NSDate *)other;
//与otherDate比较,相同返回YES
- (BOOL)isEqualToDate:(NSDate *)otherDate;`
- 取回时间间隔`objc
 //以refDate为基准时间,返回实例保存的时间与refDate的时间间隔
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
//以当前时间(Now)为基准时间,返回实例保存的时间与当前时间(Now)的时间间隔
- (NSTimeInterval)timeIntervalSinceNow;
//以1970/01/01 GMT为基准时间,返回实例保存的时间与1970/01/01 GMT的时间间隔
- (NSTimeInterval)timeIntervalSince1970;
//以2001/01/01 GMT为基准时间,返回实例保存的时间与2001/01/01 GMT的时间间隔
- (NSTimeInterval)timeIntervalSinceReferenceDate;
- (NSTimeInterval)timeIntervalSinceReferenceDate;`
时间的创建
- 创建当前时间 - NSDate * now = [NSDate date];
- 根据指定的时间差创建时间 - NSTimeInterval day = 24*60*60; NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-day]; NSDate *tomarror =[NSDate dateWithTimeIntervalSinceNow:day];
- 根据已有时间创建日期NSTimeInterval day = 24*60*60; NSDate * now = [NSDate date]; NSDate * nextDay = [now dateByAddingTimeInterval:day]; NSDate * lastDay = [now dateByAddingTimeInterval:-day];
日期的比较
- 两日期是否相同BOOL isEqual = [nextDay isEqualToDate:lastDay];
- 比较哪个日期更早 - NSDate * earlier_date = [nextDay earlierDate:lastDay];
- 比较哪个日期更晚 - NSDate * later_date = [nextDay laterDate:lastDay];
- 求两个时间相同秒数 - NSTimeInterval time = [nextDay timeIntervalSinceDate:lastDay];
设置日期格式
- 根据系统预设创建日期格式`objc
- ( NSDateFormatter * )formate{
 if (!_formate) {
 }_formate = [[NSDateFormatter alloc]init]; [_formate setTimeStyle:NSDateFormatterLongStyle]; [_formate setDateStyle:NSDateFormatterLongStyle];
 return _formate;
 }`
- 根据格式化字符创建日期格式 - -(NSDateFormatter*)formate{ if (!_formate) { _formate = [[NSDateFormatter alloc]init]; [_formate setDateFormat:@"yyyy/MM/dd HH/mm/ss Z"]; } return _formate; }- ps:这里的formate尽量使用一个懒加载的方式,并持有一个实例,有利用节约创建时间。 
字符串<--->时间--->
- 字符串转时间 - // 1.时间字符串 NSString * datestring = @"2017-06-13 14:44:11 +0800"; // 2.格式化对象的样式/z大小写都行/格式必须严格和字符串时间一样 [self.formate setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; // 3.利用时间格式化对象让字符串转换成时间 (自动转换0时区/东加西减) NSDate * date = [self.formate dateFromString:datestring];
- 时间转字符串 
    // 1.创建一个时间对象
    NSDate * date = [NSDate date];
    // 2.设置时间格式化对象的样式
    [self.formate setDateFormat:@"yyyy/MM/dd HH:mm:s"];
    // 3.利用时间格式化对象对时间进行格式化
    NSString * datestring = [self.formate stringFromDate:date];
时区
- 获取当前时区NSTimeZone * zone = [NSTimeZone systemTimeZone];
- 获取时差//时区 NSTimeZone * zone = [NSTimeZone systemTimeZone]; //时间格式 NSDate * date = [NSDate date]; //时差 NSInteger seconds = [zone secondsFromGMTForDate:date];
NSCalendar
NSCalendar:日历。对世界上现存的常用历法进行了封装,即提供了不同的历法的时间信息,又支持日历的计算。
NSDateComponents
NSDateComponents:时间容器,一个包含了详细的年月日时分秒的容器。
 
                     
                     
                 
                        
                        