SwiftDate:Swift中的日期处理库

er74 9年前

 

SwiftDate:Swift中的日期处理库

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

使用

CocoaPods安装SwiftDate

我们需要通过CocoaPods安装SwitDate,如果你还没有安装cocoapods,可以通过如下命令安装

$ gem install cocoapods 
</div>

然后在你的Xcode项目中的Podfile文件中,添加如下内容:

source 'https://github.com/CocoaPods/Specs.git'  platform :ios, '8.0'  use_frameworks!    pod 'SwiftDate'

最后,执行如下命令安装

$ pod install 
</div>

创建日期

  • 通过解析字符串创建
let date_custom = NSDate.date(fromString: "2015-07-26", format: DateFormat.Custom("YYYY-MM-DD")) 
</div>
  • 通过指定日期各部分创建
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") 
</div>
  • 通过NSDate的静态方法创建
let todayDate = NSDate.today()  let yesterdayDate = NSDate.yesterday()  let tomorrowDate = NSDate.tomorrow()

获取日期中年月日等信息

我们可以通过NSDate的以下属性获取

.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") 
</div>
.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")) 
</div>

也可以在转换方法中指定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