iOS时间那点事--NSDate
博客专区 > JustBen 的博客 > 博客详情
iOS时间那点事--NSDate
JustBen 发表于4年前
iOS时间那点事--NSDate
  • 发表于 4年前
  • 阅读 27137
  • 收藏 15
  • 点赞 4
  • 评论 0

华为云·免费上云实践>>>   

#iOS时间那点事

##NSDate

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

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

now    (当前时间点)
相对于1 January 2001, GMT的时间点
相对于1970的时间点
distantFuture	(不可达到的未来的某个时间点)
distantPast		(不可达到的过去的某个时间点

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

<!-- lang: cpp -->
@interface NSDate : NSObject  <NSCoding, NSCopying>
{
	NSTimeInterval _secondsSinceRef;
}

……

- (id) initWithTimeInterval:(NSTimeInterval) secsToBeAdded
			  sinceDate:(NSDate *) anotherDate;       相对于已知的某个时间点
- (id) initWithTimeIntervalSinceNow:(NSTimeInterval) secsToBeAdded;        相对于当前时间
- (id) initWithTimeIntervalSince1970:(NSTimeInterval)seconds;        相对于1970年1月1日0时0分0秒
- (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;       相对于2001年1月1日0时0分0秒

……

@end

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

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

<!-- lang: cpp -->
- (id) initWithTimeIntervalSinceReferenceDate:(NSTimeInterval) secs;

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

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

<!-- lang: cpp -->
NSDate *now = [NSDate date];    // [[NSDate alloc] init]
NSDate *dateFromNow = [NSDate dateWithTimeIntervalSinceNow:60];
NSDate *dateFromAnotherDate = [[NSDate alloc] initWithTimeInterval:60 sinceDate:dateFromNow];

NSTimeInterval timeInterval1 = [now timeIntervalSinceDate:dateFromNow];
NSTimeInterval timeInterval2 = [now timeIntervalSinceNow];



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

NSString *stringDate = @"12/31/9999";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
NSDate *dateCheck = [dateFormatter dateFromString:stringDate];
NSLog(@"Date = %@", dateCheck);

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

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

###本系列其他文章不断更新中:

  1. iOS时间那点事--NSDate
  2. iOS时间那点事--NSDateFormatter
  3. iOS时间那点事--NSTimeZone
  4. iOS时间那点事--NSLocale
标签: NSDate
共有 人打赏支持
JustBen
粉丝 50
博文 58
码字总数 27826
×
JustBen
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: