NSDate 那点事
转载
- NSDate对象用来表示一个具体的时间点。
- NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体。
- NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示。
可以快速地获取的时间点有:
2 | 相对于 1 January 2001 , GMT的时间点 |
3 | 相对于 1970 的时间点 |
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中最常用的方法一般是:
view source
print?
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之间! |
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。