前言
最近開發(fā)過程中,業(yè)務中一個預約的模塊,用到了很多關于時間的操作,所以今天借此機會總結(jié)下開發(fā)中會常用到的日期以及時間的操作。
總的來說,不論什么操作,合理運用
DateFormatter、Calendar和DateComponents就可以解決,同時還會省下很多時間。
獲取某個月的天數(shù)
let date = Date()
let range = calendar.range(of: .day, in: .month, for: date)
let count = range.count
獲取當前日期字符串
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 8)
let currentDateStr = dateFormatter.string(from: date)
輸出的日期格式可能是多種多樣的,只需要將常見的日期元素說明符進行搭配就好
- EEEE:“星期”的全名(比如Monday)。(EEE代表Mon)
- MMMM:“月份”的全名(比如October)。(MMM代表Oct, MM代表數(shù)字形式的月,例如05或11)
- dd:某月的第幾天(例如,09或15)
- yyyy:四位字符串表示“年”(例如2015)
- HH:兩位字符串表示“小時”(例如08或19)
- mm:兩位字符串表示“分鐘”(例如05或54)
- ss:兩位字符串表示“秒”
- zzz:三位字符串表示“時區(qū)”(例如GMT)
- GGG:公元前BC或公元后AD
詳細的日期格式請戳這里
根據(jù)字符串獲取Date類型結(jié)構(gòu)體
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateStr = "2016-05-07 17:50:00" //注意,日期字符串的格式必須和dateFormatter的格式一致,否則轉(zhuǎn)成日期就會為nil
let currentDate = dateFormatter.date(from: dateStr)
計算兩個日期的差值
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateStr = "2016-05-07 17:50:00" //注意,日期字符串的格式必須和dateFormatter的格式一致,否則轉(zhuǎn)成日期就會為nil
let currentDate = dateFormatter.date(from: dateStr)
let calendar = Calendar.current
let component: Set<Calendar.Component> = [.year, .month, .day, .hour, .minute, .second]
let dateComponent = calendar.dateComponents(component, from: currentDate!, to: date)
根據(jù)某一日期計算后面的連續(xù)多少天(比如當前開始的一周)
let date = Date()
var datesOfOneWeek = [Date]()
for i in 1...7 {
datesOfOneWeek.append(date.addingTimeInterval((Double)(i) * 24 * 60 * 60))
}
判斷時間是否在某個時間段內(nèi)(勿擾模式)
/// 將給定的某個小時,轉(zhuǎn)成當天的日期格式
///
/// - Parameter hour: 24小時制的某個小時
/// - Returns: 該小時的Date類型數(shù)據(jù)
func getCustomDateWithHour(_ hour: NSInteger) -> Date {
let currentDate = Date()
let currentCalendar = Calendar.current
let currentComponent = currentCalendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: currentDate)
var resultComponent = DateComponents()
resultComponent.setValue(currentComponent.year, for: .year)
resultComponent.setValue(currentComponent.month, for: .month)
resultComponent.setValue(currentComponent.day, for: .day)
resultComponent.setValue(hour, for: .hour)
return currentCalendar.date(from: resultComponent)!
}
/// 比較當前時間是否在當天[fromhour,toHour] 這個區(qū)間
func isBetweenFromHour(_ fromHour: NSInteger, toHour: NSInteger) -> Bool {
let date1 = self.getCustomDateWithHour(fromHour)
let date2 = self.getCustomDateWithHour(toHour)
let currentDate = Date()
if (currentDate.compare(date1) == ComparisonResult.orderedDescending && currentDate.compare(date2) == ComparisonResult.orderedAscending){
return true
} else {
return false
}
}
最后
想到再加??