NSDate的基本用法

1.NSDate對象轉(zhuǎn)成格式化的字符串對象

//通過 NSDate 獲取當前日期
let currentDate = NSDate()

// NSDateFormatter 轉(zhuǎn)換日期和字符串的工具
let dateFormatter = NSDateFormatter()

1.1 設置區(qū)域

dateFormatter.locale = NSLocale.currentLocale()
如果要設置日期為其他區(qū)域
//比如設置成希臘
dateFormatter.locale = NSLocale(localeIdentifier:"el_GR")

1.2 設置日期格式
有兩種方式可以設置日期格式:一種是通過一些預定義的日期格式化樣式(style);另外一種是通過某些說明符來手動設置日期格式。

首先我們先使用 NSDateFormatterStyle 設置日期格式。

//完整樣式
dateFormatter.dateStyle = NSDateFormatterStyle.FullStyle
var convertedDate = dateFormatter.stringFromDate(currentDate)
Tuesday, October 12, 2017

//長樣式
dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
convertedDate = dateFormatter.stringFromDate(currentDate)
October 12, 2017

//中長樣式
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
convertedDate = dateFormatter.stringFromDate(currentDate)
Otc 12,2017

//短樣式
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
convertedDate = dateFormatter.stringFromDate(currentDate)
10/9/17

使用日期說明符來設置日期格式

EEEE:“星期”的全名(比如Monday)。如需縮寫,指定1-3個字符(如E,EE,EEE代表Mon)。
MMMM:“月份”的全名(比如October)。如需縮寫,指定1-3個字符(如M,MM,MMM代表Oct)。
dd:某月的第幾天(例如,09或15)
yyyy:四位字符串表示“年”(例如2015)
HH:兩位字符串表示“小時”(例如08或19)
mm:兩位字符串表示“分鐘”(例如05或54)
ss:兩位字符串表示“秒”
zzz:三位字符串表示“時區(qū)”(例如GMT)??s寫 Z
GGG:公元前BC或公元后AD
dateFormatter.dateFormat = "EEEE, MMMM dd, yyyy"
convertedDate = dateFormatter.stringFromDate(currentDate)

dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"
convertedDate = dateFormatter.stringFromDate(currentDate)

2.將格式化的字符串通過date formatter轉(zhuǎn)換成 NSDate 對象

//示例1
var dateAsString = "24-08-2016 10:49"
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"
var newDate = dateFormatter.dateFromString(dateAsString)
//示例2
dateAsString = "Thu, 08 Oct 2015 09:22:33 GMT"
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
newDate = dateFormatter.dateFromString(dateAsString)

使用 NSDateComponents 還可以單獨獲取某一項的值,例如,星期、月份、時間、小時等。
想要實現(xiàn)此功能呢,需要用到 NSCalendar 類 ,NSDateComponents 類經(jīng)常和 NSCalendar 類搭配使用,NSCalendar 真正執(zhí)行 NSDate 和 NSDateComponents 間的轉(zhuǎn)換。這樣,我們先要獲取當前的calendar。

let calendar = NSCalendar.currentCalendar()

首先我們先來看一個 NSDate 到 NSDateComponents轉(zhuǎn)換的具體例子

let dateComponents = calendar.components([NSCalendarUnit.Day, NSCalendarUnit.Month,NSCalendarUnit.Year,NSCalendarUnit.WeekOfYear,NSCalendarUnit.Hour,NSCalendarUnit.Minute,NSCalendarUnit.Second,NSCalendarUnit.Nanosecond], fromDate: currentDate)
print("day = \(dateComponents.day)", "month = \(dateComponents.month)", "year = \(dateComponents.year)",  "week of year = \(dateComponents.weekOfYear)", "hour = \(dateComponents.hour)",  "minute = \(dateComponents.minute)", "second = \(dateComponents.second)","nanosecond = \(dateComponents.nanosecond)" , separator: ", ", terminator: "")

date components轉(zhuǎn)換到date對象

let components = NSDateComponents()
components.day = 5
components.month = 01
components.year = 2016
components.hour = 19
components.minute = 30
newDate = calendar.dateFromComponents(components)

3.比較日期和時間

首先先創(chuàng)建兩個自定義的日期對象

dateFormatter.dateFormat = "MMMM dd, yyyy zzz"
dateAsString = "Oct 08, 2015 GMT"
var date1 = dateFormatter.dateFromString(dateAsString)!

dateAsString = "Oct 10. 2015 GMT"
var date2 = dateFormatter.dateFromString(dateAsString)!

第一種方法
earlierDate: 判斷一個日期是否早于另外一個日期
laterDate: 判斷一個日期是否晚于另外一個日期
isEqualToDate:判斷兩個日期是否相等

print("Earlier date is:\(date1.earlierDate(date2))")
print("Later date is:\(date1.laterDate(date2))")
print("dates is Same:\(date1.isEqualToDate(date2))")

第二種方法
NSDate 的 compare: 方法,它需要搭配使用 NSComparisonResult 枚舉體


if date1.compare(date2) == NSComparisonResult.OrderedDescending {

    print("Date1 is Later than Date2")
} else if date1.compare(date2) == NSComparisonResult.OrderedAscending {

    print("Date1 is Earlier than Date2")
} else if date1.compare(date2) == NSComparisonResult.OrderedSame {

    print("Same dates")
}

第三種方法
計算每個日期到現(xiàn)在的時間間隔來判斷

if date1.timeIntervalSinceReferenceDate > date2.timeIntervalSinceReferenceDate {
    
    print("Date1 is Later than Date2")

} else if date1.timeIntervalSinceReferenceDate < date2.timeIntervalSinceReferenceDate {
    
    print("Date1 is Earlier than Date2")

} else {

    print("Same dates")

}

4.計算時間間隔

首先自定義兩個NSDate對象

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateAsString = "2015-10-08 14:25:37"
date1 = dateFormatter.dateFromString(dateAsString)!

dateAsString = "2018-03-05 08:14:19"
date2 = dateFormatter.dateFromString(dateAsString)!

第一種方法
使用 components:fromDate:toDate:options: ,第一個參數(shù)是 NSCalendarUnit 值的數(shù)組。這里要注意,如果第一個日期如果晚于第二個日期,則結(jié)果會返回負值。

var diffDateComponents = NSCalendar.currentCalendar().components([NSCalendarUnit.Year,NSCalendarUnit.Month,NSCalendarUnit.Day,NSCalendarUnit.Hour,NSCalendarUnit.Minute,NSCalendarUnit.Second], fromDate: date1, toDate: date2, options: NSCalendarOptions.init(rawValue: 0))
print("The difference between dates is: \(diffDateComponents.year) years, \(diffDateComponents.month) months, \(diffDateComponents.day) days, \(diffDateComponents.hour) hours, \(diffDateComponents.minute) minutes, \(diffDateComponents.second) seconds")

剩下的兩種方法都用到了 NSDateComponentsFormatter 類,它提供了多種用于自動計算日期間隔的方法,并可以返回格式化字符串結(jié)果。首先,我們創(chuàng)建一個date components formatter對象,這里只指定一個屬性:

let dateComponentsFormatter = NSDateComponentsFormatter()
dateComponentsFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.Full

unitsStyle 屬性指定我們使用的 dateComponentsFormatter 以何種格式打印日期的間隔。例如,這里我們使用 完整 樣式,這樣天數(shù)、月數(shù)等名字(如days,months)都會被顯示出來。如果我們設置 縮寫 樣式,就會顯示縮寫名字(天數(shù)顯示為d等)。你可以在 這個鏈接 中查找到所有的樣式:讓我們繼續(xù)會到日期間隔計算的話題上。我們先計算日期的間隔,再把該值傳遞給stringFromTimeInterval:方法,這樣,就能獲得日期間隔的字符串表示:

let interval = date2.timeIntervalSinceDate(date1)
dateComponentsFormatter.stringFromTimeInterval(interval)

最后,第三種計算的方法中,我們將兩個日期傳遞給 NSDateComponentsFormatter 對象的一個叫 stringFromDate:toDate: 的方法。但是這個方法需要有個前置的條件:NSDateComponentsFormatter 的 allowedUnits 屬性必須被提前設置,這個屬性接受數(shù)組類型的值,這里至少要設置一個日歷單元的值。否則這個方法會返回nil值。所以,在這個方法的使用中,我們“告訴”它需要獲取哪些日歷單元,它會按照對應的日歷單元返回結(jié)果:

dateComponentsFormatter.allowedUnits = [NSCalendarUnit.Year,NSCalendarUnit.Month,NSCalendarUnit.Day,NSCalendarUnit.Hour,NSCalendarUnit.Minute,NSCalendarUnit.Second]
let autoFormattedDifference = dateComponentsFormatter.stringFromDate(date1, toDate: date2)

感謝原作者的文章:這是一篇寫給新手的NSDate教程(Swift版)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容