转载自:http://my.oschina.net/yongbin45/blog/150114
- NSDate对象用来表示一个具体的时间点。
- NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体。
- NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示。
可以快速地获取的时间点有:
2
|
相对于 1 January 2001 ,
GMT的时间点
|
4
|
distantFuture
(不可达到的未来的某个时间点)
|
5
|
distantPast
(不可达到的过去的某个时间点
|
根据http://www.gnustep.org/实现的NSDate的版本:
01
|
@interface
NSDate : NSObject <NSCoding, NSCopying>
|
03
|
NSTimeInterval
_secondsSinceRef;
|
08
|
-
(id) initWithTimeInterval:(NSTimeInterval) secsToBeAdded
|
09
|
sinceDate:(NSDate
*) anotherDate; 相对于已知的某个时间点
|
10
|
-
(id) initWithTimeIntervalSinceNow:(NSTimeInterval) secsToBeAdded; 相对于当前时间
|
11
|
-
(id) initWithTimeIntervalSince1970:(NSTimeInterval)seconds; 相对于1970年1月1日0时0分0秒
|
12
|
-
(id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs; 相对于2001年1月1日0时0分0秒
|
可以看出,NSDate类确实只是一个相对的时间点,NSTimeInterval的单位是秒(s),_secondsSinceRef则说明NSDate对象是相对于ReferenceDate(2001年1月1日0时0分0秒)的一个时间点。
同时,根据Cocoa框架的设计原则,每个类都有一个“指定初始化方法”(指定初始化方法是参数最全,且其他初始化方法都会调用的初始化方法)。http://www.gnustep.org/实现的版本以方法:
1
|
-
(id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;
|
作为指定初始化方法,也就是说所有的时间点都转化为了相对referenceDate的时间点(时间点都是相对的,因为时间本身就是相对的)。
NSDate中最常用的方法一般是:
01
|
NSDate
*now = [NSDate date]; //
[[NSDate alloc] init]
|
02
|
NSDate
*dateFromNow = [NSDate dateWithTimeIntervalSinceNow:60];
|
03
|
NSDate
*dateFromAnotherDate = [[NSDate alloc] initWithTimeInterval:60 sinceDate:dateFromNow];
|
05
|
NSTimeInterval
timeInterval1 = [now timeIntervalSinceDate:dateFromNow];
|
06
|
NSTimeInterval
timeInterval2 = [now timeIntervalSinceNow];
|
10
|
//-------------------------------------------------------------
|
11
|
NSDate
*distantPast = [NSDate distantPast]; //
可以表示的最早的时间
|
12
|
NSDate
*distantFuture = [NSDate distantFuture]; //
可以表示的最远的未来时间
|
14
|
NSString
*stringDate = @ "12/31/9999" ;
|
15
|
NSDateFormatter
*dateFormatter = [[NSDateFormatter alloc]init];
|
16
|
[dateFormatter
setDateFormat:@ "MM/dd/yyyy" ];
|
17
|
NSDate
*dateCheck = [dateFormatter dateFromString:stringDate];
|
18
|
NSLog(@ "Date
= %@" ,
dateCheck);
|
21
|
Date
= 1999-12-30 16:00:00 +0000
|
23
|
*iOS中用NSDate表示的时间只能在distantPast和distantFuture之间!
|