SwiftDate
是Github上开源的,使用Swift语言编写的NSDate封装库,可以很方便的在Swift中处理日期,比如日期创建,比较,输出等。
特性
- 支持数学运算符进行日期计算(比如myDate + 2.week + 1.hour)
- 支持比较运算符(比如<,>,==,<=,>=)
- 快速获取/修改日期各部分内容(比如获取或修改日期中的月份)
- 提供通用格式化输出或自定义的格式化输出
- 提供一系列.toString方法
- 提供简便的方法获取yesterday,tomorrow等
依赖
- iOS 8.0+ / Mac OS X 10.10+
- Xcode 6.3+
- Swift 1.2
支持Swift2.0版本,地址在文末的Github段落中
使用
CocoaPods安装SwiftDate
我们需要通过CocoaPods安装SwitDate,如果你还没有安装cocoapods,可以通过如下命令安装
$ gem install cocoapods
然后在你的Xcode项目中的Podfile文件中,添加如下内容:
source 'https://github.com/CocoaPods/Specs.git' platform :ios,'8.0' use_frameworks! pod 'SwiftDate'
最后,执行如下命令安装
$ 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() let yesterdayDate = NSDate.yesterday() let tomorrowDate = NSDate.tomorrow()
获取日期中年月日等信息
.year .month .weekOfMonth .weekday .weekdayOrdinal .day .hour .minute .second .era .firstDayOfWeek // (first day of the week of passed date) .lastDayOfWeek // (last day of the week of passed date) .nearestHour // (nearest hour of the passed date) .isLeapYear() // true if date's represented year is leap .monthDays() // return the number of days in date's represented month
修改日期
var date = NSDate() date = date.set("hour",value: 12)! date = date.set("day",value: 1)!
日期运算
let date = NSDate() let tomorrow = date+1.day let two_months_ago = date-2.months
时区转换
let date = NSDate() //本地时区 let date_as_utc = date.toUTC() //UTC 时间 let date_as_beijing = date_as_utc.toTimezone("UTC+8") //北京时间
日期比较
我们可以通过数学运算符比较
let date1 = NSDate.date(fromString: "2015-07-26",format: DateFormat.Custom("YYYY-MM-DD")) let date2 = NSDate.date(fromString: "2015-07-27",format: DateFormat.Custom("YYYY-MM-DD")) if date2 > date1 { // TODO something }
还可以通过NSDate的以下一些方法来比较
let isInRange : Bool = date1.isInTimeRange("11:00","15:00")
.isToday() // true if represented date is today .isTomorrow() .isYesterday() .isThisWeek() // true if represented date's week is the current week .isSameWeekOf(date: NSDate) // true if two dates share the same year's week .dateAtWeekStart() // return the date where current's date week starts .beginningOfDay() // return the same date of the sender with time set to 00:00:00 .endOfDay() // return the same date of the sender with time set to 23:59:59 .beginningOfMonth() // return the date which represent the first day of the sender date's month .endOfMonth() // return the date which represent the last day of the sender date's month .beginningOfYear() // return the date which represent the first day of the sender date's year .endOfYear() // return the date which represent the last day of the sender date's year .isWeekday() // true if current sender date is a week day .isWeekend() // true if current sender date is a weekend day (sat/sun)
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 .toShortString() // short style,both time and date are printed .toMediumString() // medium style,both time and date are printed .toLongString() // full style,both time and date are printed .toShortDateString() // short style,print only date .toShortTimeString() // short style,print only time .toMediumDateString() // medium style,print only date .toMediumTimeString() // medium style,print only time .toLongDateString() // long style,print only date .toLongTimeString() // long style,print only time
最后我们还可以输出相对时间的格式,比如输出"2 hours ago"
var d = NSDate()-2.hour var abb = d.toRelativeString(abbreviated: true,maxUnits: 3) println("data: \(abb)")
Github
SwiftDate
SwiftDate支持Swift 2.0版本
本文作者: 阳春面
原文地址:http://www.aswifter.com/2015/07/26/use-swiftdate/