SwiftDate:Swift中的日期處理庫(kù)

SwiftDate是Github上開(kāi)源的,使用Swift語(yǔ)言編寫的NSDate封裝庫(kù)洼滚,可以很方便的在Swift中處理日期察藐,比如日期創(chuàng)建皮璧,比較,輸出等分飞。

特性

  • 支持?jǐn)?shù)學(xué)運(yùn)算符進(jìn)行日期計(jì)算(比如myDate + 2.week + 1.hour)
  • 支持比較運(yùn)算符(比如<,>,==,<=,>=)
  • 快速獲取/修改日期各部分內(nèi)容(比如獲取或修改日期中的月份)
  • 提供通用格式化輸出或自定義的格式化輸出
  • 提供一系列.toString方法
  • 提供簡(jiǎn)便的方法獲取yesterday,tomorrow等

依賴

  • iOS 8.0+ / Mac OS X 10.10+
  • Xcode 6.3+
  • Swift 1.2

支持Swift2.0版本悴务,地址在文末的Github段落中

使用

CocoaPods安裝SwiftDate

我們需要通過(guò)CocoaPods安裝SwitDate,如果你還沒(méi)有安裝cocoapods譬猫,可以通過(guò)如下命令安裝

$ gem install cocoapods

然后在你的Xcode項(xiàng)目中的Podfile文件中讯檐,添加如下內(nèi)容:

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

pod 'SwiftDate'

最后,執(zhí)行如下命令安裝

$ pod install

創(chuàng)建日期

  • 通過(guò)解析字符串創(chuàng)建
let date_custom = NSDate.date(fromString: "2015-07-26", format: DateFormat.Custom("YYYY-MM-DD"))

  • 通過(guò)指定日期各部分創(chuàng)建
let date_from_components = NSDate.date(refDate: nil, year: 2014, month: 01, day: nil, hour: nil, minute: nil, second: nil, tz: "UTC")
  • 通過(guò)String類的toDate方法創(chuàng)建
let date = "2015-07-26".toDate(formatString: "YYYY-MM-DD")
  • 通過(guò)NSDate的靜態(tài)方法創(chuàng)建
let todayDate = NSDate.today()
let yesterdayDate = NSDate.yesterday()
let tomorrowDate = NSDate.tomorrow()

獲取日期中年月日等信息

我們可以通過(guò)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)!

日期運(yùn)算

let date = NSDate()
let tomorrow = date+1.day
let two_months_ago = date-2.months

時(shí)區(qū)轉(zhuǎn)換

let date = NSDate() //本地時(shí)區(qū)
let date_as_utc = date.toUTC() //UTC 時(shí)間
let date_as_beijing = date_as_utc.toTimezone("UTC+8") //北京時(shí)間

日期比較

我們可以通過(guò)數(shù)學(xué)運(yùn)算符比較

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

}

還可以通過(guò)NSDate的以下一些方法來(lái)比較

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轉(zhuǎn)換為字符串

let string = date.toString(format: DateFormat.Custom("YYYY-MM-DD"))

也可以在轉(zhuǎn)換方法中指定NSDateFormatterStyle

let string = date.toString(dateStyle: .ShortStyle timeStyle:.LongStyle relativeDate:true)

還可以通過(guò)以下方法轉(zhuǎn)換為特定的字符串

.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

最后我們還可以輸出相對(duì)時(shí)間的格式染服,比如輸出"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版本

本文作者: 陽(yáng)春面
原文地址:http://www.aswifter.com/2015/07/26/use-swiftdate/

歡迎關(guān)注我的微信公眾號(hào)别洪,分享Android 開(kāi)發(fā),IOS開(kāi)發(fā)柳刮,Swift開(kāi)發(fā)和互聯(lián)網(wǎng)內(nèi)容
微信號(hào):APP開(kāi)發(fā)者

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挖垛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子秉颗,更是在濱河造成了極大的恐慌痢毒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚕甥,死亡現(xiàn)場(chǎng)離奇詭異哪替,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)菇怀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門凭舶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晌块,“玉大人,你說(shuō)我怎么就攤上這事库快。” “怎么了钥顽?”我有些...
    開(kāi)封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵义屏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蜂大,道長(zhǎng)闽铐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任奶浦,我火速辦了婚禮兄墅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澳叉。我一直安慰自己隙咸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布成洗。 她就那樣靜靜地躺著五督,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓶殃。 梳的紋絲不亂的頭發(fā)上充包,一...
    開(kāi)封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音遥椿,去河邊找鬼基矮。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冠场,可吹牛的內(nèi)容都是我干的家浇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碴裙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蓝谨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起青团,我...
    開(kāi)封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤譬巫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后督笆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芦昔,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年娃肿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咕缎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珠十。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凭豪,靈堂內(nèi)的尸體忽然破棺而出焙蹭,到底是詐尸還是另有隱情,我是刑警寧澤嫂伞,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布孔厉,位于F島的核電站,受9級(jí)特大地震影響帖努,放射性物質(zhì)發(fā)生泄漏撰豺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一拼余、第九天 我趴在偏房一處隱蔽的房頂上張望污桦。 院中可真熱鬧,春花似錦匙监、人聲如沸凡橱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梭纹。三九已至,卻和暖如春致份,著一層夾襖步出監(jiān)牢的瞬間变抽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工氮块, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绍载,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓滔蝉,卻偏偏與公主長(zhǎng)得像击儡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝠引,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 有一個(gè)rapper寫過(guò)一個(gè)rap阳谍,詞是這么寫的:天干物燥,小心火燭螃概,人生漫長(zhǎng)矫夯,我勸你好生走路。這是我很喜歡的一句話...
    愛(ài)在櫻花雨紛飛閱讀 211評(píng)論 0 0
  • 夢(mèng)中安排了 好多次機(jī)緣 卻總越不過(guò)沉默 的門檻 太陽(yáng)叮叮鐺擋 敲著調(diào)色板 沒(méi)有小雨 我卻把自己 站成一把小傘 將織...
    微雨憑欄閱讀 200評(píng)論 0 1
  • 中午本來(lái)想小睡一會(huì)吊洼,結(jié)果做了一個(gè)夢(mèng)再起來(lái)已經(jīng)過(guò)去一個(gè)小時(shí)了训貌,很奇怪,在夢(mèng)里知道自己在做夢(mèng),因?yàn)閴?mèng)見(jiàn)自己回到了曾經(jīng)在...
    Yw文哪兒閱讀 247評(píng)論 0 4
  • 胡理樂(lè) “快點(diǎn),先把作業(yè)做完款慨!”孩子放學(xué)剛進(jìn)家門儒飒,媽媽就命令道。 “媽媽檩奠,我想先玩一會(huì)再做作業(yè)桩了。”孩子試著與媽媽協(xié)...
    快樂(lè)爸爸日記閱讀 7,754評(píng)論 1 6