前言
NSDate是一个与时间有关的类,这个类提供了获取系统当前的时间,和一些简单的时间比较。对于时间的比较只能比较两个时间的早晚,而不能精确的给出两个时间具体相差多少。在实际的项目开发中,我们遇到的需求远远不止NSDate所提供的,所以我们需要在此基础上,自己去写一些方法。本文就简单的介绍一些官方文档提供的一些关于时间的处理方法。
一、创建并初始化日期
1、+ date
(1)方法原型
+ (instancetype)date
//返回系统当前的世界标准时间,这个时间有时区差,与我们实际的时间大概相差八个小时
(2)方法实例
NSDate *nowDate = [NSDate date];
NSLog(@"系统当前的时间:%@",nowDate);
输出的结果: 系统当前的时间:2016-01-20 02:22:13 +0000
系统当前时间:2016-01-20 10:22:13
2、+ dateWithTimeIntervalSinceNow:
(1)方法原型
+ (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds
//返回一个在当前的时间加上多少秒之后的一个新的时间
(2)方法实例
NSDate *nowDate = [NSDate date];
NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:10];
NSLog(@"系统当前的时间:%@",nowDate);
NSLog(@"date1的时间:%@",date1);
系统当前的时间:2016-01-20 02:31:10
date1的时间:2016-01-20 02:31:20
3、+ dateWithTimeInterval:sinceDate:
(1)方法原型
+ (instancetype)dateWithTimeInterval:(NSTimeInterval)seconds
sinceDate:(NSDate *)date
//返回一个在指定时间加上多少秒之后的一个新的时间
(2)方法实例
NSDate *nowDate = [NSDate date];
NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:10];
NSDate *date2 = [NSDate dateWithTimeInterval:10 sinceDate:date1];
NSLog(@"系统当前的时间:%@",nowDate);
NSLog(@"date2的时间:%@",date2);
date1的时间:2016-01-20 02:59:24
date2的时间:2016-01-20 02:59:34
4、+ dateWithTimeIntervalSinceReferenceDate:
(1)方法原型
+ (instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds
//返回一个在2001年1月1日 00:00:00加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:10];
NSLog(@"date的时间:%@",date);
date1的时间:2001-01-01 00:00:10
5、+ dateWithTimeIntervalSince1970:
(1)方法原型
+ (instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds
//返回一个在1970年1月1日 00:00:00加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date = [NSDate dateWithTimeIntervalSince1970:10];
NSLog(@"date的时间:%@",date);
date的时间:1970-01-01 00:00:10
6、init
(1)方法原型
- (instancetype)init
//初始化返回系统当前的世界标准时间,与系统实际的时间大概相差八个小时
(2)方法实例
NSDate *date = [[NSDate alloc] init];
NSLog(@"date的时间:%@",date);
系统当前的时间:2016-01-20 11:28:47
date的时间:2016-01-20 03:28:47
7、- initWithTimeIntervalSinceNow:
(1)方法原型
- (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)seconds
//返回一个在当前的时间加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date = [[NSDate alloc] init];
NSDate *date1 = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSLog(@"date的时间:%@",date);
NSLog(@"date1的时间:%@",date1);
date的时间:2016-01-20 03:36:03
date1的时间:2016-01-20 03:36:13
8、- initWithTimeIntervalSinceNow:
(1)方法原型
- (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)seconds
//返回一个在当前的时间加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date = [[NSDate alloc] init];
NSDate *date1 = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSLog(@"date的时间:%@",date);
NSLog(@"date1的时间:%@",date1);
date的时间:2016-01-20 03:36:03
date1的时间:2016-01-20 03:36:13
9、- initWithTimeInterval:sinceDate:
(1)方法原型
- (instancetype)initWithTimeInterval:(NSTimeInterval)seconds
sinceDate:(NSDate *)refDate
//返回一个在指定的时间加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date = [[NSDate alloc] init];
NSDate *date1 = [[NSDate alloc] initWithTimeInterval:10 sinceDate:date];
NSLog(@"date的时间:%@",date);
NSLog(@"date1的时间:%@",date1);
date的时间:2016-01-20 03:52:02
date1的时间:2016-01-20 03:52:12
10、- initWithTimeIntervalSinceReferenceDate:
(1)方法原型
- (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds
//返回一个在2001年1月1日 00:00:00加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date1 = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:10];
NSLog(@"date1的时间:%@",date1);
date1的时间:2001-01-01 00:00:10
11、- initWithTimeIntervalSince1970:
(1)方法原型
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)seconds
//返回一个在1970年1月1日 00:00:00加上多少秒之后的一个新的时间
(2)方法实例
NSDate *date1 = [[NSDate alloc] initWithTimeIntervalSince1970:10];
NSLog(@"date1的时间:%@",date1);
date1的时间:1970-01-01 00:00:10
小结:前面1-5种方法和6-10种方法功能是一样的,前面五种方法是用的类方法,后面五种方法用的是实例方法,根据自己的需求选择用哪种方法。
二、获取时间的边界
1、+ distantFuture
(1)方法原型
+ (NSDate *)distantFuture
//返回一个未来很遥远的时间
(2)方法实例
NSDate *date = [NSDate distantFuture];
NSLog(@"date的时间:%@",date);
date的时间:4001-01-01 00:00:00
2、+ distantPast
(1)方法原型
+ (NSDate *)distantPast
//返回一个过去很遥远的时间
(2)方法实例
NSDate *date = [NSDate distantPast];
NSLog(@"date的时间:%@",date);
date的时间:0000-12-30 00:00:00
三、日期的比较
1、- isEqualToDate:
(1)方法原型
- (BOOL)isEqualToDate:(NSDate *)anotherDate
//比较两个日期是否相等
(2)方法实例
NSDate *date1 = [NSDate distantPast];
NSDate *date2 = [NSDate distantFuture];
BOOL result = [date1 isEqualToDate:date2];
2、- earlierDate:
(1)方法原型
- (NSDate *)earlierDate:(NSDate *)anotherDate
//比较两个日期,返回较早的日期
(2)方法实例
NSDate *date1 = [NSDate distantPast];
NSDate *date2 = [NSDate distantFuture];
NSDate *date3 = [date1 earlierDate:date2];
NSLog(@"%@",date3);
输出:0000-12-30 00:00:00
3、- compare:
(1)方法原型
- (NSComparisonResult)compare:(NSDate *)anotherDate
//比较两个日期,返回较晚的日期
(2)方法实例
NSDate *date1 = [NSDate distantPast];
NSDate *date2 = [NSDate distantFuture];
NSInteger result = [date1 compare:date2];
NSLog(@"%d",result);
如果date1小于date2,返回-1;
如果date1等于date2,返回 0;
如果date1大于date2,返回 1;
四、获取时间间隔
1、- timeIntervalSinceDate:
(1)方法原型
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
//比较两个日期相隔多少秒
(2)方法实例
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSInteger result = [date1 timeIntervalSinceDate:date2];
NSLog(@"%d",result);
输出结果:-10
2、timeIntervalSinceNow
(1)方法原型
@property(readonly) NSTimeInterval timeIntervalSinceNow
//比较与系统当前的时间相隔多少秒
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSInteger result = [date timeIntervalSinceNow];
NSLog(@"%d",result);
3、+ timeIntervalSinceReferenceDate
(1)方法原型
+ (NSTimeInterval)timeIntervalSinceReferenceDate
//返回该日期距离2001年1月1日 00:00:00多少秒
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSInteger result = [date timeIntervalSinceReferenceDate
];
NSLog(@"%d",result);
4、timeIntervalSinceReferenceDate
(1)方法原型
@property(readonly) NSTimeInterval timeIntervalSinceReferenceDate
//返回该日期距离2001年1月1日 00:00:00多少秒
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSInteger result = date.timeIntervalSinceReferenceDate;
NSLog(@"%d",result);
5、timeIntervalSince1970
(1)方法原型
@property(readonly) NSTimeInterval timeIntervalSince1970
//返回该日期距离1970年1月1日 00:00:00多少秒
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSInteger result = date.timeIntervalSince1970;
NSLog(@"%d",result);
五、添加时间间隔
1、- dateByAddingTimeInterval:
(1)方法原型
- (instancetype)dateByAddingTimeInterval:(NSTimeInterval)seconds
//返回该日期添加多少秒之后的一个新的日期
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSDate *date1 = [date dateByAddingTimeInterval:10];
NSLog(@"date:%@",date);
NSLog(@"date1:%@",date1);
date:2016-01-20 06:40:05
date1:2016-01-20 06:40:15
六、日期转换成字符串格式
1、description
(1)方法原型
@property(readonly, copy) NSString *description
//将日期转换成字符串格式
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSString *str = date.description;
NSLog(@"%@",str);
2、- descriptionWithLocale:
(1)方法原型
- (NSString *)descriptionWithLocale:(id)locale
//根据地区格式化时间
(2)方法实例
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:10];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
NSString *str = [date descriptionWithLocale:locale];
NSLog(@"%@",str);
输出:2016年1月20日 星期三 中国标准时间 下午3:08:18