SwiftDate 浅析
SwiftDate是Github上开源的,使用Swift语言编写的NSDate封装库,可以很方便的在Swift中处理日期,比如日期创建,比较,输出等。
特性
- 支持数学运算符进行日期计算(比如myDate + 2.week + 1.hour)
- 支持比较运算符(比如<,>,==,<=,>=)
- 快速获取/修改日期各部分内容(比如获取或修改日期中的月份)
- 提供通用格式化输出或自定义的格式化输出
- 提供一系列.toString方法
- 提供简便的方法获取yesterday,tomorrow等
依赖
- iOS 8.0+ / Mac OS X 10.10+
- Xcode 6.4
- Swift 1.2
支持Swift2.0版本,地址在文末的Github段落中
使用
CocoaPods安装SwiftDate
我们需要通过CocoaPods安装SwitDate,如果你还没有安装cocoapods,可以通过如下命令安装
| $ gem install cocoapods | 
然后在你的Xcode项目中的Podfile文件中,添加如下内容:
| source 'https://github.com/CocoaPods/Specs.git' | 
最后,执行如下命令安装
| $ pod install | 
创建日期
- 通过解析字符串创建
| let date_custom = NSDate.date(fromString: "2015-07-26", format: DateFormat.Custom("YYYY-MM-DD")) | 
- 通过指定日期各部分创建
| let date_from_components = NSDate.date(refDate: nil, year: 2014, month: 01, day: nil, hour: nil, minute: nil, second: nil, tz: "UTC") | 
- 通过String类的toDate方法创建
| let date = "2015-07-26".toDate(formatString: "YYYY-MM-DD") | 
- 通过NSDate的静态方法创建
| let todayDate = NSDate.today() | 
获取日期中年月日等信息
我们可以通过NSDate的以下属性获取
| .year | 
修改日期
| var date = NSDate() | 
日期运算
| let date = NSDate() | 
时区转换
| let date = NSDate() //本地时区 | 
日期比较
我们可以通过数学运算符比较
| let date1 = NSDate.date(fromString: "2015-07-26", format: DateFormat.Custom("YYYY-MM-DD")) | 
还可以通过NSDate的以下一些方法来比较
| let isInRange : Bool = date1.isInTimeRange("11:00","15:00") | 
| .isToday() // true if represented date is today | 
NSDate转换为字符串
| let string = date.toString(format: DateFormat.Custom("YYYY-MM-DD")) | 
也可以在转换方法中指定NSDateFormatterStyle
| let string = date.toString(dateStyle: .ShortStyle timeStyle:.LongStyle relativeDate:true) | 
还可以通过以下方法转换为特定的字符串
| .toISOString() // DateFormat.ISO8601 | 
最后我们还可以输出相对时间的格式,比如输出”2 hours ago”
| var d = NSDate()-2.hour | 
SwiftDate 是个非常强大的日期/日历框架,完全使用 Swift 编写。SwiftDate 部分是基于 QuantLib 的,著名的定量金融学库,SwiftDate 对金融应用非常友好,同时也有强大的商业日历功能。
创建日期:
var d1 = Date(year : 2014, month : 5, day : 15)
var d2 = Date(string : "2014-05-15")
简单的日期计算:
d1 = d1 + 1
if (d2 > d1) {
...
}
复杂的日期转换函数:
var d = Date(string : "2014-04-30")
d.addMonths(1) // returns "2014-05-30"
d.addMonths(1, rollDay : RollDay.ThirtyOne) // returns "2014-05-31"
d + "1M" // returns "2014-05-30"
日历
var cal = USNYSECalendar()
var d1 = Date(string : "2014-07-03")
var nbd = cal.nextBizDay(d1) // returns "2014-07-07" - skipped over 4th of July!
日期计算:
var dc = Actual360()
dc.dayCountFraction(Date(string : "2014-01-31"), date2: Date(string : "2014-02-28"))
项目主页:
Github
SwiftDate
SwiftDate支持Swift 2.0版本
参考链接:
1.https://www.aswifter.com/2015/07/26/use-swiftdate/
2.http://www.faceye.net/search/180350.html#bottom-ad
SwiftDate 浅析的更多相关文章
- SQL Server on Linux 理由浅析
		SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ... 
- 【深入浅出jQuery】源码浅析--整体架构
		最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ... 
- 高性能IO模型浅析
		高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking ... 
- netty5 HTTP协议栈浅析与实践
		一.说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端.移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析.分拣后从不同的 ... 
- Jvm 内存浅析 及 GC个人学习总结
		从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ... 
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
		熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ... 
- 【深入浅出jQuery】源码浅析2--奇技淫巧
		最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ... 
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
		浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ... 
- word-break|overflow-wrap|word-wrap——CSS英文断句浅析
		---恢复内容开始--- word-break|overflow-wrap|word-wrap--CSS英文断句浅析 一 问题引入 今天在再次学习 overflow 属性的时候,查看效果时,看到如下结 ... 
随机推荐
- 关于Axis 1.4 环境的搭建问题
			本来很简单的一个环境搭建问题足足困扰了我一周的时间,所以思来想去还是写一篇博文记录下来,以后就不用那么四处去找资料找例子了,实在是浪费时间 废话不多说 1 首先在MyEclipse下创建WEB PR ... 
- linux命令  time
			功能:用于计算命令执行的世界 语法: time command 例如: hbg@root:~/dl$ time ls111 apple.sh b.txt duplic ... 
- OpenGL4.x不支持gluPerspective函数。故备份之
			template <typename type> inline mat4<type> mat4<type>::perspectiveProjection(type ... 
- LeetCode OJ 34. Search for a Range
			Given a sorted array of integers, find the starting and ending position of a given target value. You ... 
- TortoiseGit - 分支管理 -增加分支
			1.本地当前在master分支,右击选择Create Branch... 2.填写Branch的名称 3.右击选择Push,在Ref-Local,选择刚才新建的Branch名称 4.点击OK后,在弹出 ... 
- Openjudge-计算概论(A)-数组顺序逆放
			描述: 将一个数组中的值按逆序重新存放.例如,原来的顺序为8,6,5,4,1.要求改为1,4,5,6,8.输入输入为两行:第一行数组中元素的个数n(1<n<100),第二行是n个整数,每两 ... 
- boost log库
			http://blog.csdn.net/sheismylife/article/category/1820481 
- wcf中的使用全双工通信
			wcf中的契约通信默认是请求恢复的方式,当客户端发出请求后,一直到服务端回复时,才可以继续执行下面的代码. 除了使用请求应答方式的通信外,还可以使用全双工.下面给出例子: 1.添加一个wcf类库 2. ... 
- CodeForces 567C Geometric Progression 类似dp的递推统计方案数
			input n,k 1<=n,k<=200000 a1 a2 ... an 1<=ai<=1e9 output 数组中选三个数,且三个数的下标严格递增,凑成形如b,b*k,b* ... 
- 软件测试之α测试和Beta测试
			实施验收测试的常用策略有三种,它们分别是: · 正式验收 · 非正式验收或Alpha 测试 · Beta 测试 因此,Alpha测试和Beta测试都属于验收测试.所谓验收测试是软件产品完成了功能测试和 ... 
