转载自: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]; |
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]; |
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之间! |