前言

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