转载自:http://my.oschina.net/yongbin45/blog/150114

  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中最常用的方法一般是:

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之间!

NSDate 那点事的更多相关文章

  1. NSDate 哪些事

    .什么是时间戳? 时间戳是自 1970 年 1 月 1 日(00:00:00 GMT)至当前时间的总秒数. 2.NSDate,时间戳,NSString 之间的转换 //string 转 date + ...

  2. NSDate与时间戳的那点事

    对于项目中常常使用的时间来说,通过时间戳的形式进行数据的操作能带来极大的方便,以下就时间戳的生成和转换通过Demo的形式进行解说 声明一个时间类型的变量: // 获取当前的时间 // 以下的第一个方法 ...

  3. OC: 类的扩展、类的延展、协议、 NSDate

      NSDateFormatter 指定⽇日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter ...

  4. 【腾讯Bugly干货分享】H5 视频直播那些事

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...

  5. CSharpGL(31)[译]OpenGL渲染管道那些事

    CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...

  6. TODO:字节的那点事Go篇

    TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64) 在Golang中string底层是由byte数组组成的. fmt.Println(len(&quo ...

  7. Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事

    前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...

  8. OpenNLP:驾驭文本,分词那些事

    OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...

  9. HTTPS那些事(一)HTTPS原理

    转载来自:http://www.guokr.com/post/114121/ 谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传 ...

随机推荐

  1. 2019JAVA第一次編程总结

    2019第二周实验报告 Java实验报告 班级 计算机科学与技术二班 学号 20188442 姓名 吴怡君 完成时间 2019/9/7 评分等级 实验一 Java开发环境与简单Java程序 一. 实验 ...

  2. Linux 查看CPU 核数 还有 CPU 个数的命令

    cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l 个数 cat /proc/cpuinfo | grep 'process' | ...

  3. C++中的class和struct区别

    1,经过不停的改进,结构体 struct 变得原来越不像它在 C 语言中的样子了: 1,struct 在 C 语言中仅为了定义一个变量的集合,仅此而已,不能定义函数: 2,struct 在 C++ 中 ...

  4. qt 获取磁盘空间大小,cpu利用率,内存使用率

    转自:http://www.qtcn.org/bbs/read-htm-tid-60613.html. 1:封装成一个类,直接调用即可.已经在多个商业项目中使用.2:所有功能全平台 win linux ...

  5. JDBC插入中文数据出现?号地解决问题

    1. 查看jdbc配置是否指定编码 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/te ...

  6. linux系统管理基础知识

    1.linux的安装配置 虚拟机安装 Linux安装和分区 IP地址的配置 ifup eth0,ifdoen eth0 关闭不常用的程序 关闭selinux 远程登录(多用户,多任务) 用户和角色划分 ...

  7. echarts markLine 辅助线非直线设置

    效果图: 用例option: option = { title: { text: '未来一周气温变化', subtext: '纯属虚构' }, tooltip: { trigger: 'axis' } ...

  8. CSUST 8.5 早训

    ## Problem A A - Meeting of Old Friends CodeForces - 714A 题意: 解题说明:此题其实是求两段区间的交集,注意要去除掉交集中的某个点. 题解: ...

  9. Hive内部表,外部表和分区表

    外部表和内部表的区别 内部表也称之为managed_table: 默认存储在/user/hive/warehouse下,也可以通过location指定: 删除表事,会删除表数据以及元数据: 外部表称之 ...

  10. UITableView 在没有数据时候分割线问题

    在iOS4.3中可以直接设置footer为nil,但是在5.0不行,因为UITableView会默认生成一个Footer. (详见iOS Release Notes中的说明:Returning nil ...