iOS时间常用方法

最近使用时间的方法交频繁,就总结了一下自己比较常见的时间相关的方法如下与大家分享。


首先是NSDate的部分方法

  1. 可以使用 首先创建现在的时间使用类方法

      NSDate *date = [NSDate date];
      或使用对象方法 NSDate *date = [[NSDate alloc]init];
    

2.时间转化为字符串-(NSString *)stringFromDate:(NSDate *)date;

   NSDate *dataNow = [NSDate date];
   NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
   formatter.dateFormat = @"HH:mm:ss";
   NSString *dateStr= [formatter stringFromDate:dataNow];```

3.字符串转化为时间-(nullable NSDate *)dateFromString:(NSString *)string;

        NSString *string = @"2014:10:10";
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
        formatter.dateFormat = @"HH:mm:ss";
        NSDate *date = [formatter dateFromString:string];
        以上时间格式化样式可以自定义如下:  
        formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
        formatter.dateFormat = @"yyyy/MM/dd HH/mm/ss";                                                                                                                      

4.dateByAddingTimeInterval:该方法是加上或减去一段时间得到的时间如:

  -(void)viewDidLoad {
       [super viewDidLoad]; 
     NSDate *data = [NSDate date];NSDateFormatter *formatter =   [[NSDateFormatter alloc]init];
     formatter.dateFormat = @"HH:mm:ss";
     NSString *dateStr= [formatter stringFromDate:data];
    NSLog(@"%s-%@",__FUNCTION__,dataStr);
     data = [data dateByAddingTimeInterval:-60];
     dataStr = [self datatoString:data];
     NSLog(@"%s-%@",__FUNCTION__,dataStr);
   }

第一次大一的时间是10:10:10的话那么第二次打印的就是10:09:10,即比前一次少了60秒
也可以用
NSDate *date2 = [NSDate dateWithTimeInterval:50 sinceDate:date];方法即通过第一个时间加上50秒后的时间


5.关于日期的比较(使用NSData)

     假如现在的时间date和一个exampleDate比较,下面有两种方法, 一种是使用NSComparisonResult对象可以直接比较date对象或转化为字   符串后比较字符串,另一种直接使用比较date的系统方法。
     第一种使用NSComparisonResult对象,使用该对象的比较的结果是一个枚举如下:
typedef NS_ENUM(NSInteger, NSComparisonResult)
                        {NSOrderedAscending = -1L,
                         NSOrderedSame,
                         NSOrderedDescending
};三种枚举类型
      NSOrderedAscending对应的是顺序即前面的时间比较大
      NSOrderedAscending对应的是顺序即后面的时间比较大
      NSOrderedSame对应的是两个时间字符串相等
     如:   NSComparisonResult result = [data compare:exampleData]; 
     如果result等于NSOrderedAscending就代表顺序即现在的时间比较大。

另一种是使用系统方法直接比较早于、晚于、等于这三种情况如下:

BOOL equal = [data isEqual:exampleDate];
BOOL earlier = [data earlierDate:exampleDate];
BOOL later = [data laterDate:exampleDate];

6.- (NSTimeInterval)timeIntervalSinceNow从当前时间开始,经过多少秒到达对象指定时间。
例子如下:
假如exampleStr是2016-10-30 10:10:10 现在的时间是2016-10-30 09:09:09

NSDate * date= [formatter dateFromString:exampleStr];
//过期日期距今还有多少秒
int time = [date timeIntervalSinceNow];
//时
int h = time/3600;
//分
int m = (time%3600)/60;
//秒
int s = time % 60;
return [NSString stringWithFormat:@"%02d:%02d:%02d",h,m,s];
返回的将是01:01:01

7.- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
返回当前对象时间与参数传递的对象时间的相隔秒数,即返回两个 时间相隔的时间秒数

如下:
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:0];
    NSDate *date2 = [NSDate dateWithTimeInterval:50 sinceDate:date];
    NSInteger seconds = [date timeIntervalSinceDate:date2];
    NSLog(@"%ld",(long)seconds);
打印结果为-50即date2比data块50秒

NSCalendar & NSDateComponents部分方法

NSCalendar顾名思义,日历对象封装了对系统日期的计算,包括这一年开始,一周的开始。

1.以一定的格式查分一个时间如以年月日查分

NSDate * date = [NSDate date];//当前时间
NSCalendar * calendar = [NSCalendar currentCalendar];//当前用户的calendar
int unit = NSCalendarUnitYear | NSCalendarUnitMonth |   NSCalendarUnitDay;
NSDateComponents * components = [calendar components:unit fromDate:date];
NSLog(@"%ld年%ld月%ld日" ,(long)components.year,(long)components.month,(long)components.day);

2.可以获得相对时间

NSDateComponents * components = [[NSDateComponents alloc] init];
components.year = 1;
components.month = 1;
components.day = 1;
components.hour =1;
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDate * currentDate = [NSDate date];
NSDate * exampleData = [calendar dateByAddingComponents:components toDate:currentDate options:NSCalendarMatchStrictly];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy年MM月dd日";
NSString * dateStr = [formatter stringFromDate:exampleData];
NSLog(@"%@",dateStr);
这样获得的就是从现在起一年零一个月一天一小时后的时间

3.获得两个时间的差值

NSDate *date = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
NSString *selfStr = [formatter stringFromDate:date];
NSDate *dateNow = [formatter dateFromString:selfStr];
NSDate *exampleDate = [date dateByAddingTimeInterval:360.0];
// 获得nowDate和exampleDate的差距
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitDay fromDate:dateNow toDate:exampleDate options:0];
NSLog(@"%d年%d月%d日", components.year, components.month, components.day);
这样打印出来的即是两个时间相差的多少年多少月多少日

4.既然有该方法(方法3)那么就可以比较两个时间的具体如:
如果返回的cmps.year==1,那么就表示两个时间差一年;
如果差cmps.year==1就代表差一天

你可能感兴趣的:(iOS时间常用方法)