ios开发-日期处理(类似朋友圈,微博等的发送时间)
ios开发中,我们经常要处理从服务器获取的时间。类似朋友圈,微博这些应用。我们经常可以看到“刚刚”,“31分钟前发表”,“昨天5点”,之类的字样。
当时我们从服务器端获取的都是那条朋友圈信息,或者微博的创建时间。所以我们每次显示数据的时候,都需要根据跟当前的时间做对比,按照格式,算出
我们想要的结果。
例如,我们从服务器获取的时间,大概都类似于 Sun May 24 12:12:00 +0800 2015
我们还是先详细说明一下日期格式吧
- 年
- y 将年份 (0-9) 显示为不带前导零的数字
- yy 以带前导零的两位数字格式显示年份
- yyy 以四位数字格式显示年份
- yyyy 以四位数字格式显示年份
- 月
- M 将月份显示为不带前导零的数字(如一月表示为 1)
- MM 将月份显示为带前导零的数字(例如 01/12/01)
- MMM 将月份显示为缩写形式(例如 Jan)
- MMMM 将月份显示为完整月份名(例如 January)
- 一月 Jan January
- 二月 Feb February
- 三月 Mar March
- 四月 Apr April
- 五月 May May
- 六月 Jun June
- 七月 Jul July
- 八月 Aug August
- 九月 Sep September
- 十月 Oct October
- 十一月 Nov November
- 十二月 Dec December
- 日
- d 将日显示为不带前导零的数字(如 1)
- dd 将日显示为带前导零的数字(如 01)
- 星期
- EEE 将日显示为缩写形式(例如 Sun)
- EEEE 将日显示为全名(例如 Sunday)
- 星期一 Mon Monday
- 星期二 Tue Tuesday
- 星期三 Wed Wednesday
- 星期四 Thu Thursday
- 星期五 Fri Friday
- 星期六 Sat Saturday
- 星期天 Sun Sunday
- 小时
- h 使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)
- hh 使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)
- H 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)
- HH 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)
- 分钟
- m 将分钟显示为不带前导零的数字(例如 12:1:15)
- mm 将分钟显示为带前导零的数字(例如 12:01:15)
- 秒
- s 将秒显示为不带前导零的数字(例如 12:15:5)
- ss 将秒显示为带前导零的数字(例如 12:15:05)
- f 显示秒的小数部分
- ff 将精确显示到百分之一秒
- ffff 将精确显示到万分之一秒
- 用户定义格式中最多可使用七个 f 符号
- 上午&下午
- t 使用 12 小时制
- 中午之前任一小时显示大写的 A
- 中午到 11:59 PM 之间的任一小时显示大写的 P
- tt 对于使用 12 小时制的区域设置
- 中午之前任一小时显示大写的 AM
- 中午到 11:59 PM 之间的任一小时显示大写的 PM
- 对于使用 24 小时制的区域设置,不显示任何字符
- 时区
- z 显示不带前导零的时区偏移量
- zz 显示带前导零的时区偏移量(例如 -08)
- zzz 显示完整的时区偏移量(例如 -0800)
- 纪元
- gg 显示时代/纪元字符串(例如 A.D.)
理解完上面的知识之后,我们就可以写代码了。预先制定一下需求吧
刚刚(一分钟内)
X分钟前(一小时内)
X小时前(当天)
昨天 HH:mm(昨天)
MM-dd(当年)
yyyy-MM-dd HH:mm(更早期)
第一步:我们一个日期NSDate的分类,然后先写一个类方法,将从服务器的时间数据转成NSDate(代码继续用swift练练)
我们先按照“ Sun May 24 12:12:00 +0800 2015”这个格式举例
- ///使日期字符串 创建NSDate
- class func createDate(fullDateString:String)->NSDate?{
- //创建fomater
- let ft = NSDateFormatter()
- //设置本地化
- // 2. 要指定日期的地区,Xcode 6.3 beta 还不需要,地区需要指定英语
- // 注意:在真机调试的时候,一定要指定区域,否则以前版本同样无法转换
- ft.locale = NSLocale(localeIdentifier: "en")
- //设置日期格式
- ft.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
- //生成日期
- return ft.dateFromString(fullDateString)
- }
第二步:再在NSDate分类中创建对象方法(函数),正式处理时间, 里面要用到NSCalendar类(日历)
- func fullDescription()->String{
- //用日历类获得当前的日期
- let calendar = NSCalendar.currentCalendar()
- //创建datefomater
- let ft = NSDateFormatter()
- //当天
- if calendar.isDateInToday(self){
- //获取日期与当前时间的差值
- let delta = Int(NSDate().timeIntervalSinceDate(self))
- if delta < {
- return "刚刚"
- }
- if delta < {
- return "\(delta/60)分钟前"
- }
- return "\(delta/3600)小时前"
- }
- //昨天
- if calendar.isDateInYesterday(self){
- ft.dateFormat = "昨天 HH:mm"
- return ft.stringFromDate(self)
- }
- //计算年度差值
- let coms = calendar.components(NSCalendarUnit.CalendarUnitYear, fromDate: NSDate(), toDate: self, options: NSCalendarOptions())
- //今年
- if coms.year == {
- ft.dateFormat = "MM-dd"
- return ft.stringFromDate(self)
- }
- //剩下的都是往年了
- ft.dateFormat = "yyyy-MM-dd HH:mm"
- return ft.stringFromDate(self)
- }
第三步:上面两个方法都写完之后,每次只要调用即可获得想要的数据了
想要的数据 = NSDate.createDate("服务器记录的创建时间").fullDescription()
ios开发-日期处理(类似朋友圈,微博等的发送时间)的更多相关文章
- Masonry 布局 cell 高度适应的一种方案(实现类似朋友圈简单布局)
来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89298/ 点击 → 申请加入伯乐在线专栏作者 前言: 我模仿的是微博的布局所以也就没有 评论动态刷新cell. 1 ...
- 李洪强iOS开发本人集成环信的经验总结_06_发送好友请求
李洪强iOS开发本人集成环信的经验总结_06_发送好友请求 同步好友请求 异步好友请求
- 周记6——css实现类似朋友圈九宫格缩略图完美展示
公司有在做一个类似qq空间的开发,发表说说避免不了的要有图片展示. 产品提出的空间缩略图的展示类似*信朋友圈那种效果--图片不变形.能看到中间部分. 这里给出3种解决方案(jsbin地址失效时可复制代 ...
- iOS 类似朋友圈的图片浏览器SDPhotoBrowser
SDPhotoBrowser.Demo 1.在文件SDBrowserImageView.m中有用SDWebImage到网络加载图片 需要的注释去掉即可 #import "ViewContro ...
- iOS开发日期处理
Foundation框架之 日期与时间 #import"ViewController.h"@interfaceViewController() { NSTimer*_timer;/ ...
- IOS开发学习笔记031-代码实现微博界面
微博界面如下 1.准备资源文件 新建一个plist文件,添加条目,root类型是array,子类型是Dictionary 2.更改父类,实现代理方法 接下来得实现过程如上一篇文章,改变父类为UITab ...
- ios开发日期的NSDate,NSCalendar分类
#import <Foundation/Foundation.h> @interface NSDate (XMGExtension) /** */ // @property (nonato ...
- Android开发 sharesdk分享微信/朋友圈的时候只显示文字,不显示链接
问题:分享的时候只将分享的content分享出去了,连标题及链接都没有分享出去. 原因:没有配置image导致. 解决办法: 在 showShare 方法里面添加配置: if(ImageUrlOrP ...
- iOS开发:后台运行以及保持程序在后台长时间运行
第一部分 1.先说说iOS 应用程序5个状态: 停止运行-应用程序已经终止,或者还未启动. 不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备). 活动-app处于“使用中 ...
随机推荐
- selenium2自动化测试学习笔记(一)
从这周开始学习自动化测试,采用selenium2,目标是在本月学习到appium,并测试公司的真实APP项目. 系统环境:win10 语言:python3.6.4 工具:selenium2 IDE:p ...
- lua向文件中写入数据,进行记录
function readfile(path) local file = io.open(path, "r") if file then local content = file: ...
- java基础之类与对象
[类 & 对象] 1.类:具有一系列相同属性(特征)和方法(行为)的个体的集合,称为类. 类是一个抽象的概念,只能说类具有哪些属性,而不能直接对属性进行赋值. 例如:人类有身高的属性,但是不能 ...
- C语言函函数嵌套
一.实验作业 1.1 PTA题目 设计思路 1.定义整形变量i,if(b==n-1)用于递归的终止,并返回1. 2.for i=b to n ,if(a[i]<a[min]);进行升序排序 3. ...
- 课堂测试ch06
课堂测试ch06 下面代码中,对数组x填充后,采用直接映射高速缓存,所有对x和y引用的命中率为(D) A. 1 B. 1/4 C. 1/2 D. 3/4 解析:在填充了之后,对于x和y数组,只有在引用 ...
- alpha-咸鱼冲刺day3
一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 今天把数据库的表给建好了,学长那边把登陆跟注册页面也做好了(纯页面,html5+css的那种) 四,问题困难 日常啥都不会,百度 ...
- Java HashMap工作原理及实现
Java HashMap工作原理及实现 2016/03/20 | 分类: 基础技术 | 0 条评论 | 标签: HASHMAP 分享到:3 原文出处: Yikun 1. 概述 从本文你可以学习到: 什 ...
- 14-TypeScript简单工厂模式
在TypeScript中,要调用功能,通常在调用方通过实例化被调用方对象来调用相关方法,但这种实现在调用方和被调用方形成了强耦合的关系. 另外如果被调用方有种实现,在调用方需要根据场景去实例化不同的类 ...
- BizTalk Server 2010高可用方案
BizTalk Server 2010高可用方案 本文介绍了 Microsoft BizTalk Server 中通过对主机的各层进行扩展提供高可用性的方案. 分隔各个区域的功能分为不同的主机和中的层 ...
- js 过多 导致页面加载过慢
自己的代码检查了很久,才检查 出来 通常我们的网站里面会加载一些js代码,统计啊,google广告啊,百度同盟啊,阿里妈妈广告代码啊, 一堆,最后弄得页面加载速度很慢,很慢. 解决办法:换一个js包含 ...