1. NSDate对象用来表示一个具体的时间点。
  2. NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体。
  3. NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示。

可以快速地获取的时间点有:




​1​

​now    (当前时间点)​


​2​

​相对于​​​​1​​​ ​​January ​​​​2001​​​​, GMT的时间点​


​3​

​相对于​​​​1970​​​​的时间点​


​4​

​distantFuture   (不可达到的未来的某个时间点)​


​5​

​distantPast     (不可达到的过去的某个时间点​


根据http://www.gnustep.org/实现的NSDate的版本:




​01​

​@interface NSDate : NSObject  <NSCoding, NSCopying>​


​02​

​{​


​03​

​NSTimeInterval _secondsSinceRef;​


​04​

​}​


​05​

 


​06​

​……​


​07​

 


​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秒​


​13​

 


​14​

​……​


​15​

 


​16​

​@end​


可以看出,NSDate类确实只是一个相对的时间点,NSTimeInterval的单位是秒(s),_secondsSinceRef则说明NSDate对象是相对于ReferenceDate(2001年1月1日0时0分0秒)的一个时间点。

同时,根据Cocoa框架的设计原则,每个类都有一个“指定初始化方法”(指定初始化方法是参数最全,且其他初始化方法都会调用的初始化方法)。http://www.gnustep.org/实现的版本以方法:




​1​

​- (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;​


作为指定初始化方法,也就是说所有的时间点都转化为了相对referenceDate的时间点(时间点都是相对的,因为时间本身就是相对的)。

NSDate中最常用的方法一般是:




​​view source​ ​


​​print​​​​?​​


​01​

​NSDate *now = [NSDate date];    ​​​​// [[NSDate alloc] init]​


​02​

​NSDate *dateFromNow = [NSDate dateWithTimeIntervalSinceNow:60];​


​03​

​NSDate *dateFromAnotherDate = [[NSDate alloc] initWithTimeInterval:60 sinceDate:dateFromNow];​


​04​

 


​05​

​NSTimeInterval timeInterval1 = [now timeIntervalSinceDate:dateFromNow];​


​06​

​NSTimeInterval timeInterval2 = [now timeIntervalSinceNow];​


​07​

 


​08​

 


​09​

 


​10​

​//-------------------------------------------------------------​


​11​

​NSDate *distantPast = [NSDate distantPast];          ​​​​//  可以表示的最早的时间​


​12​

​NSDate *distantFuture = [NSDate distantFuture];      ​​​​//  可以表示的最远的未来时间​


​13​

 


​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);​


​19​

 


​20​

​Output:​


​21​

​Date = 1999-12-30 16:00:00 +0000​


​22​

 


​23​

​*iOS中用NSDate表示的时间只能在distantPast和distantFuture之间!​