最近使用时间的方法交频繁,就总结了一下自己比较常见的时间相关的方法如下与大家分享。
首先是NSDate的部分方法
-
可以使用 首先创建现在的时间使用类方法
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就代表差一天