想要解析、验证、操作和显示日期,在 Swift 中,你的最佳选择是 SwiftDate。无论是最为简单的日期操作,还是复杂的业务逻辑,SwiftDate 都会是你下一个 Swift 项目的合适选择。
简介
SwiftDate,是 malcommac 在 Github 上开源的Swift语言日期库,项目位于 https://github.com/malcommac/SwiftDate,目前版本为 v6.1.0。SwiftDate 用于操控和显示日期和时区,可以在全苹果平台上,甚至在Linux和Swift的服务端框架中使用。SwiftDate 功能丰富,包括了支持多种格式的日期解析多达140种语言的日期格式化,时间单位操作,超过20中的日期判断和比较方式,随机日期生成等等,且接口简单,使用方便,一个库就能满足日期方面的所有需求。
安装
SwiftDate 可以使用 CocoaPods 在 Cocoa 项目中进行安装,需要 CocoaPods 1.1+:
gem install cocoapods
也可以使用 carthage 来进行依赖定义,在 Cartfile 中添加:
github "malcommac/SwiftDate" ~> 6.0
还可以使用 Swift 包管理工具安装,在 Package.swift 中添加:
dependencies: [.package(url: "https://github.com/malcommac/SwiftDate.git", from: "5.0.0")]
示例
SwiftDate 功能众多,它可以对多种形式的日期字符串进行解析:
// 15+种默认格式let _ = "2010-05-20 15:30:00".toDate()// 自定义格式let _ = "2010-05-20 15:30".toDate("yyyy-MM-dd HH:mm")// All ISO8601变种let _ = "2017-09-17T11:59:29+02:00".toISODate()// RSS, Extended, HTTP, SQL, .NET等let _ = "19 Nov 2015 22:20:40 +0100".toRSS(alt: true)
也可以对日期进行操作,包括日期的加减等:
// All default datetime formats (15+) are recognized automaticallylet _ = "2010-05-20 15:30:00".toDate()// You can also provide your own format!let _ = "2010-05-20 15:30".toDate("yyyy-MM-dd HH:mm")// All ISO8601 variants are supported too with timezone parsing!let _ = "2017-09-17T11:59:29+02:00".toISODate()// RSS, Extended, HTTP, SQL, .NET and all the major variants are supported!let _ = "19 Nov 2015 22:20:40 +0100".toRSS(alt: true)
也能够进行日期的判断和比较,内置了许多方便的方法:
let _ = dateA >= dateB || dateC < dateBlet _ = dateA.compare(toDate: dateB, granularity: .hour) == .orderedSamelet _ = dateA.isAfterDate(dateB, orEqual: true, granularity: .month)let _ = dateC.isInRange(date: dateA, and: dateB, orEqual: true, granularity: .day)let _ = dateA.earlierDate(dateB)let _ = dateA.laterDate(dateB)
SwiftDate还支持对日期进行推导,从一些常用的日期概念计算得到实际的日期:
let _ = DateInRegion().dateAt(.endOfDay) // 今天结束let _ = dateA.nextWeekday(.friday) // dateA 后的下一个周五let _ = (date.dateAt(.startOfMonth) - 3.days) // 月头前3天let _ = dateA.compare(.endOfWeek) // 是否一周的结束
还有极为丰富的日期格式化:
let london = Region(calendar: .gregorian, zone: .europeLondon, locale: .english)let date = ... // 2017-07-22T18:27:02+02:00 in london regionlet _ = date.toDotNET() // /Date(1500740822000+0200)/let _ = date.toISODate() // 2017-07-22T18:27:02+02:00let _ = date.toFormat("dd MMM yyyy 'at' HH:mm") // "22 July 2017 at 18:27"
总结
SwiftDate功能丰富,使用方便,其实现了包括日期和时区的解析、操控和格式化等方法,使得在 Swift 中进行日期相关的处理变得十分简单,在实践中有很强的实用价值,同时也是一个十分优秀的 Swift 开源项目。