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 属性的时候,查看效果时,看到如下结 ...
随机推荐
- lldpd启动脚本分析
#!/bin/sh /etc/rc.common # Copyright (C) 2008-2012 OpenWrt.org #启动顺序 START=90 #创建PID文件 SERVICE_USE_P ...
- Java comparable 和 comparator
一.comparator 接口继承 public class ComparatorTest { /** * @param args */ public static void main(String[ ...
- SQL_where条件的优化
原则,多数数据库都是从 左到右的顺序处理条件,把能过滤更多数据的条件放在前面,过滤少的条件放后面 SQL1: select * from employee where sala ...
- Centos7 设置DNS 服务器
在CentOS 7下,手工设置 /etc/resolv.conf 里的DNS,过了一会,发现被系统重新覆盖或者清除了.和CentOS 6下的设置DNS方法不同,有几种方式: 1.使用全新的命令行工具 ...
- dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
http://blog.sina.com.cn/s/blog_8b5bb24f01016y3o.html 一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指 ...
- 12C CLONE PDB and config service_listener
Clone PDB PtestDEV to Ptestuat in testuat 1) Clone PtestDEV to Ptestuat C:\Windows\system32> ...
- HDU3371--Connect the Cities(最小生成树)
Problem Description In 2100, since the sea level rise, most of the cities disappear. Though some sur ...
- 关于GVIM的配置。
最近开始考虑从常用的 Dev-Cpp 和 Visual Studio 开发环境中转到gvim+gcc+gdb. 我一直觉得IDE很好方便,不是很明白别人这样的配置.但还是开始有意识的去尝试更换环境. ...
- iOS tableView的系统分割线定格设置以及分割线自定制
一.关于分割线的位置. 分割线的位置就是指分割线相对于tableViewCell.如果我们要根据要求调节其位置,那么在iOS7.0版本以后,提供了一个方法如下: if ([self.tableView ...
- C# 反射相关的东西
public class PlugingManager { //插件装载器 public ArrayList Plugins = new ArrayList(); ...