以前新工作在做郵箱app項目,里面新做了一個日程模塊,用了很多日期出來分類,有很多對日期特殊處理.這里貢獻出來.日期處理特別需要處理的是盡量用系統(tǒng)的類,不要轉(zhuǎn)成日期字符串再比較,日期轉(zhuǎn)字符串特別耗費性能.
//是否是一周內(nèi)的時間 7天內(nèi)
- (BOOL)isWeak{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *cmps = [calendar components:NSCalendarUnitWeekdayOrdinal fromDate:self toDate:[NSDate date] options:0];
return cmps.weekdayOrdinal == 0;
}
//上下午時間顯示 上午9:00
- (NSString *)currentHalfDay{
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.AMSymbol = @"上午";
format.PMSymbol = @"下午";
format.dateFormat = @"ah:mm";
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//zh_CN en_US_POSIX
[format setLocale:locale];
NSString *timeStr = [format stringFromDate:self];
return timeStr;
}
//一天時間取00:00
- (NSDate *)zeroOfDate
{
NSCalendar *calendar = [NSCalendar currentCalendar];
return [calendar startOfDayForDate:self];
}
// 將秒刻度清零
- (NSDate *)dateWithZeroSeconds
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
NSDateComponents *components = [calendar components:unit fromDate:self];
NSDate *date = [calendar dateFromComponents:components];
return date;
}
//星期幾
- (NSString *)getWeakDay:(NSDate *)date{
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"EEE";
return [fmt stringFromDate:self];
}
//計算天數(shù)差時候,比如 今23.59 和明天 01:00算差一天,要按當(dāng)?shù)貢r間計算, 這樣就得處理由于時區(qū)差導(dǎo)致的問題
- (NSString *)differentDayWithNow
{
一個月內(nèi),判斷本地化天數(shù)差可以這樣
//本地時間天數(shù)判斷差幾天
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay ;
NSString *days = @""; //本地化天數(shù)差
NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
days = [NSString stringWithFormat:@"%ld",labs(selfCmps.day - nowCmps.day)];
/* 大于一個月,后上面方法就不適用了,得用下面的方法
NSDateComponents *cmps = [calendar components:NSCalendarUnitDay fromDate:self toDate:[NSDate date] options:0];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"HH";
NSString *timeStr = [format stringFromDate:self];
NSTimeInterval timeZoneOffset = [[NSTimeZone defaultTimeZone] secondsFromGMT];
if ([timeStr intValue] <= timeZoneOffset/(60*60)) {
days = [NSString stringWithFormat:@"%ld",labs(cmps.day) + 1];
}else{
days = [NSString stringWithFormat:@"%ld",labs(cmps.day)];
}
*/
}
// 判斷是否是同一天
- (BOOL)isSameDay:(NSDate *)date
{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay ;
NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
NSDateComponents *theCmps = [calendar components:unit fromDate:date];
return
(selfCmps.year == theCmps.year) &&
(selfCmps.month == theCmps.month) &&
(selfCmps.day == theCmps.day);
}
//是否是今年
- (BOOL)isInThisYear{
NSCalendar *calendar = [NSCalendar currentCalendar];
BOOL isInThisYear = [calendar isDate:self equalToDate:[NSDate date] toUnitGranularity:(NSCalendarUnitYear)];
return isInThisYear;
}
//天數(shù)時間差
- (NSString *)differentDayFromStartDate:(NSDate *)startDate
{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitDay ;
NSDateComponents *cmps = [calendar components:unit fromDate:self toDate:startDate options:0];
NSString *dateDiff = @"";
if (cmps.day < 0) { //self時間在startDate時間以后幾天
dateDiff = [NSString stringWithFormat:@"%ld",labs(cmps.day)];
}else if(cmps.day == 0){
dateDiff = @"0";
}else{//self時間在startDate時間之前幾天
dateDiff = [NSString stringWithFormat:@"%ld",(long)-(cmps.day)];
}
return dateDiff;
}
//小時時間差
- (NSString *)differentHourFromStartDate:(NSDate *)startDate
{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitHour ;
NSDateComponents *cmps = [calendar components:unit fromDate:self toDate:startDate options:0];
NSString *dateDiff = @"";
if (cmps.hour < 0) { //結(jié)束時間在開始時間以后
dateDiff = [NSString stringWithFormat:@"%ld",labs(cmps.hour)];
}else if(cmps.hour == 0){
dateDiff = @"0";
}else{
dateDiff = [NSString stringWithFormat:@"%ld",(long)-(cmps.hour)];
}
return dateDiff;
}
//分鐘時間差 isremainder = yes 求余數(shù) %60
- (NSString *)differentMinFromStartDate:(NSDate *)startDate isRemainder:(BOOL)isRemainder{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitMinute ;
NSDateComponents *cmps = [calendar components:unit fromDate:self toDate:startDate options:0];
NSString *dateDiff = @"";
NSInteger mins = labs(cmps.minute);
if (isRemainder == YES) {
mins = labs(cmps.minute) % 60;
}
if (cmps.minute < 0) { //結(jié)束時間在開始時間以后
dateDiff = [NSString stringWithFormat:@"%ld",(long)mins];
}else if(cmps.minute == 0){
dateDiff = @"0";
}else{
dateDiff = [NSString stringWithFormat:@"%ld",(long)-mins];
}
return dateDiff;
}