NSDate

 NSDate 时间类,继承自NSObject,其对象表示一个时间点

    NSDate *date = [NSDate date];

    NSLog(@"date = %@", date);

  2015-12-04 19:08:00.624 OCNSDate[2955:309612] date = 2015-12-04 11:08:00 +0000

  打印显示的是格里尼治时间 年-月-日 时:分:秒 + 时区

  1. 得到一个距离当前时间间隔时间点的创建方法  dateWithTimeIntervalSinceNow:(NSTimeInterval)

  (NSTimeInterval) 的本质是double数据类型

    NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:**];  // 用格里尼治时间加8个小时的时差,得到北京时间

    NSLog(@"date1 = %@", date1);

  2015-12-04 19:08:00.625 OCNSDate[2955:309612] date1 = 2015-12-04 19:08:00 +0000

 

    练习1:得到明天当前的时间点

    NSDate *nextDay = [NSDate dateWithTimeIntervalSinceNow:** + **];

    练习2:得到明年的时间点

    NSDate *nextYear = [NSDate dateWithTimeIntervalSinceNow:*** + **];

    NSLog(@"%@", nextYear);

  2. 计算给定时间和当前时间点的时间间隔     .timeIntervalSinceNow

NSTimeInterval interval = nextDay.timeIntervalSinceNow;

NSLog(@"%.2f", interval);

 3. 计算两个时间点的时间间隔  timeIntervalSinceDate:

NSTimeInterval interval2 = [date timeIntervalSinceDate:nextYear];

NSLog(@"%.2f", interval2);

  时间戳的概念: 一个时间点距离 1970.1.1 的时间间隔,这个时间是以秒为单位,就叫做时间戳

  时间戳的求法: timeIntervalSince1970

NSTimeInterval interval3 = [date timeIntervalSince1970];

NSLog(@"%.2f", interval3);

  将时间戳转化为时间对象  dateWithTimeIntervalSince1970:

NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:3600];

NSLog(@"%@", date2);

  获取北京时间   dateByAddingTimeInterval:

NSDate *date3 = [date dateByAddingTimeInterval:8*60*60];

NSLog(@"%@", date3);

  练习3: 一个当前时间和一个固定时间的差值,如果差值在60秒之内,则输出"刚刚",如果时间差值在60~3600秒,则输出在"xx分钟之前", 如果在3600~24*3600之内,则输出在"xx小时之前",如果在24*3600秒之外输出固定的时间

  固定时间

    NSDate *pastDate = [NSDate dateWithTimeIntervalSinceNow:-];

    NSLog(@"%@", pastDate);

  当前时间

    NSDate *nowDate = [NSDate date];

  

    固定时间与当前时间的差值

    NSTimeInterval interval4 = [nowDate timeIntervalSinceDate:pastDate];

    NSLog(@"时间差为 %.2f 秒", interval4);

    ) {

        NSLog(@"刚刚");

    }){

        NSLog();
    }*){

        NSLog();

    }*){

        NSLog(@"%@", pastDate);
    }

NSDateFormatter

  NSDateFormatter 日期格式类,继承自NSFormatter,主要作用是将NSDate对象转换为某种格式,然后以字符串的形式输出

NSDateFormatter *formartter = [[NSDateFormatter alloc] init];

  1. 设置日期格式中用到的字母: y 代表年, M 代表 月, d 代表天 H 代表时 m 代表分, s 代表秒

    [formartter setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];

    NSDate *date4 = [NSDate dateWithTimeIntervalSinceNow:];

  2. 将时间对象转为设定的格式     stringFromDate:

  格式化的时候系统会自动加上距离零时区的时间间隔

    NSString *dateString = [formartter stringFromDate:date4];

    NSLog(@"%@", dateString);

  练习: 将date4以@"2015年份09月份24号 11点43分20秒"的形式输出

  创建一个时间格式类对象  init方法创建

NSDateFormatter *myFormatter = [[NSDateFormatter alloc] init];

  指定输出格式   setDateFormat:@"具体时间格式"

[myFormatter setDateFormat:@"yyyy年份MM月份dd号 HH点mm分ss秒"];

  用一个字符串接收转化后的时间   stringFromDate:

NSString *dateString1 = [myFormatter stringFromDate:date4];

NSLog(@"%@", dateString1);

  将时间字符串转换为NSDate对象

  例如:  @"2015年11月24号 11时10分10秒"

    NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init];
    [formatter3 setDateFormat:@"yyyy年MM月dd号 HH时mm分ss秒"];

  准备时间字符串
    NSString *dateString3 = @"2015年11月24号 11时10分10秒";

  使用时间格式对象借助时间字符串格式化时间对象

    NSDate *date5 = [formatter3 dateFromString:dateString3];

  转过来的时间会被回归到零时区的时间

    NSLog(@"%@", date5);

  如果想得到北京时间需要手动加上8小时

    NSDate *date6 = [date5 dateByAddingTimeInterval:**];

    NSLog(@"%@", date6); 

Objective-C学习篇10—NSDate与NSDateFormatter的更多相关文章

  1. [python][django学习篇][10]再次修改博客首页模板

    目前我们看到的只是模板中预先填充的一些数据,我们得让它显示从数据库中获取的文章数据.下面来稍微改造一下模板: 删除所有article标签,然后添加以下内容,将从数据库读取到的内容填充到模板变量{{ p ...

  2. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

  3. Java多线程(学习篇)

    Java多线程:(学习篇) 1.什么是线程 2.线程状态 3.线程中断 4.线程交互 5.同步机制 6.锁机制 7.堵塞队列与堵塞栈 8.条件变量.原子量.线程池等 9.线性安全类和Callable与 ...

  4. python-基础学习篇(一)

    python基础学习(一) 不积硅步,无以至千里.基础的学习越加透彻,才能更清楚的理解和分析需求,我贯彻基础学习“永无止境”的理念,故把自学的知识梳理在博客中,基础学习篇无限更新. python介绍 ...

  5. Unity3D热更新之LuaFramework篇[10]--总结篇

    背景 19年年初的时候,进到一家新单位,公司正准备将现有的游戏做成支持热更的版本.于是寻找热更方案的任务就落在了我头上. 经过搜索了解,能做Unity热更的方案是有好几种,但是要么不够成熟,要么不支持 ...

  6. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

  7. OC学习篇之---总结和学习目录

    今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生 ...

  8. JavaWeb学习篇之----自定义标签&&JSTL标签库详解

    今天来看一下自定义标签的内容,自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面 ...

  9. Tomcat集群配置学习篇-----分布式应用

    Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...

随机推荐

  1. [Struts2学习笔记] -- 简单的类型转换

    接下来学习一下Struts2简单的类型转换,Struts2基于ognl.jar实现了简单类型的数据转换.比如jsp页面中的form值与字段值的转换,下面写一个例子. 1.创建一个jsp页面,编写一个f ...

  2. WinPcap编程(二)

    0. 这一次具体讲抓包的两种方法. (建议)清除ARP表,最好自己写个批处理命令.快一点. 1.0 抓包步骤 步骤很简单:先打开适配器列表 --> 选择适配器 --> 通过遍历链表的方式到 ...

  3. iOS6 自动布局 入门–Auto Layout(转)

    iOS6 自动布局 入门–Auto Layout(转) 标签: 杂谈   目前为止,即使你的界面设计是在合理的复杂度内,你也必须要为之写许多代码来适应变化的布局.现在我相信你会很高兴听到这种情况将不会 ...

  4. ExtJs5_继承自定义一个控件

    Extjs的开发都可以遵循OOP的原则,其对类的封装也很完善了.自定义一个控件最简单的办法就是继承一个已有的控件.根据上一节的需要,我做了一个Button的子类.首先根据目录结构,在app目录下建立一 ...

  5. Jest

    http://www.ibm.com/developerworks/cn/java/j-javadev2-24/

  6. 基于单例使用ThreadLocal对多线程下数据的访问修改

    package cn.lyy.thread; import java.util.Random; /** * 基于单例模式的基础上,使用ThreadLocal为每一个进入的线程生成一个实例, * 用来对 ...

  7. Open vSwitch源码阅读【转】及自己的理解【稍后更新】

    http://blog.chinaunix.net/uid-24485075-id-2240075.html

  8. PBOC规范研究

    一.ISO14443协议和PBOC关于CID的约定 看过协议的人其实都明白,RATS命令中参数字节的低半字节是CID,期中,CID不能为15. ISO14443协议中要求当RATS命令的CID等于0时 ...

  9. (2015年郑州轻工业学院ACM校赛题) B迷宫

    这是个简单的广搜题,注意下一下细节都能写出来, 大多数人都少考虑了一点,就是 假如 我的起始点就有一个机关, 并且不是 1 号机关, 这样的话是无结果的.不懂的可以测试一下代码下面的数据 #inclu ...

  10. C++ —— 非常量引用不能指向临时对象

    目录 举例 分析 解决 1.举例 非常量引用 指向 临时对象 —— 即:将 临时对象 传递给 非常量引用类型. 如以下情况就会出现: 实现实数Rational类,实数可以使用+号相加,运算的结果要可以 ...