一、日期
-
NSDate 日期類型
- 當(dāng)前時間: [NSDate date]
-
時間比較疏之,推薦轉(zhuǎn)換成NSDate類型,然后在進(jìn)行比較
-
1.[NSDate1 timeIntervalSinceDate: NSDate2]-> NSDate1 和 NSDate2相差多少秒
Snip20150914_92.png 2.NSCalendar 日歷對象
-
-
NSString 與 NSDate 相互轉(zhuǎn)換
1.要利用NSDateFormatter戒良,
注意
:轉(zhuǎn)換的前提必須要告訴轉(zhuǎn)換的日期格式NSDateFormatter体捏,否則轉(zhuǎn)換不成功為null2.
NSString -》 NSDate
Snip20150914_90.png-
3.NSDate - > NSString
Snip20150914_93.png
NSCalendar 日歷對象
-
必知:
- 1.如何獲取NSDate的年月日時分秒
Snip20150914_94.png
Snip20150914_96.png- 根據(jù)一個時間單元獲取時間元素
Snip20150914_98.png
Snip20150914_97.png
比較兩個時間的差值
- 1.兩個日期日期比較前,要先設(shè)置日期格式NSDateFormatter糯崎,然后將兩個比較的日期都轉(zhuǎn)換成NSDate峡捡,再進(jìn)行比較之間的差值
Snip20150914_99.png
- 封裝NSDate比較封裝到分類中
- 注意:日歷對象已經(jīng)幫我們封裝了陈莽,現(xiàn)在我們自己實(shí)現(xiàn)以下判斷:是否是今天,是否是昨天,是否是明天等方法
#import <Foundation/Foundation.h>
@interface NSDate (JPExtension)
- (NSDateComponents *)intervalToDate:(NSDate *)date;
- (NSDateComponents *)intervalToNow;
/**
* 是否為今年
*/
- (BOOL)isThisYear;
/**
* 是否為今天
*/
- (BOOL)isToday;
/**
* 是否為昨天
*/
- (BOOL)isYesterday;
/**
* 是否為明天
*/
- (BOOL)isTomorrow;
@end
#import "NSDate+JPExtension.h"
@implementation NSDate (JPExtension)
- (NSDateComponents *)intervalToDate:(NSDate *)date
{
// 日歷對象
NSCalendar *calendar = [NSCalendar currentCalendar];
// 想比較哪些元素
NSCalendarUnit unit = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
// 比較
return [calendar components:unit fromDate:self toDate:date options:0];
}
- (NSDateComponents *)intervalToNow
{
return [self intervalToDate:[NSDate date]];
}
/**
* 是否為今年
*/
- (BOOL)isThisYear
{
NSCalendar *calendar = [NSCalendar currentCalendar];
// 獲得年
NSInteger nowYear = [calendar component:NSCalendarUnitYear fromDate:[NSDate date]];
NSInteger selfYear = [calendar component:NSCalendarUnitYear fromDate:self];
return nowYear == selfYear;
}
- (BOOL)isToday
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
return nowCmps.year == selfCmps.year
&& nowCmps.month == selfCmps.month
&& nowCmps.day == selfCmps.day;
}
/**
* 是否為昨天
*/
- (BOOL)isYesterday
{
// now : 2015-02-01 00:01:05 --> 2015-02-01
// self : 2015-01-31 23:59:10 --> 2015-01-31
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
// 獲得只有年月日的時間
NSString *nowString = [fmt stringFromDate:[NSDate date]];
NSDate *nowDate = [fmt dateFromString:nowString];
NSString *selfString = [fmt stringFromDate:self];
NSDate *selfDate = [fmt dateFromString:selfString];
// 比較
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
return cmps.year == 0
&& cmps.month == 0
&& cmps.day == 1;
}
/**
* 是否為明天
*/
- (BOOL)isTomorrow
{
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
// 獲得只有年月日的時間
NSString *nowString = [fmt stringFromDate:[NSDate date]];
NSDate *nowDate = [fmt dateFromString:nowString];
NSString *selfString = [fmt stringFromDate:self];
NSDate *selfDate = [fmt dateFromString:selfString];
// 比較
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit unit = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear;
NSDateComponents *cmps = [calendar components:unit fromDate:selfDate toDate:nowDate options:0];
return cmps.year == 0
&& cmps.month == 0
&& cmps.day == -1;
}
@end
- 在發(fā)帖模型中 利用自定義的NSDate分類棉圈,對 發(fā)帖時間進(jìn)行處理 后返回處理后的日期
#pragma mark - getter
- (NSString *)created_at
{
// 日期格式化類
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// NSString -> NSDate
NSDate *createdAtDate = [fmt dateFromString:_created_at];
// 比較【發(fā)帖時間】和【手機(jī)當(dāng)前時間】的差值
NSDateComponents *cmps = [createdAtDate intervalToNow];
if (createdAtDate.isThisYear) {
if (createdAtDate.isToday) { // 今天
if (cmps.hour >= 1) { // 時間差距 >= 1小時
return [NSString stringWithFormat:@"%zd小時前", cmps.hour];
} else if (cmps.minute >= 1) { // 1分鐘 =< 時間差距 <= 59分鐘
return [NSString stringWithFormat:@"%zd分鐘前", cmps.minute];
} else {
return @"剛剛";
}
} else if (createdAtDate.isYesterday) { // 昨天
fmt.dateFormat = @"昨天 HH:mm:ss";
return [fmt stringFromDate:createdAtDate];
} else { // 今年的其他時間
fmt.dateFormat = @"MM-dd HH:mm:ss";
return [fmt stringFromDate:createdAtDate];
}
} else { // 非今年
return _created_at;
}
}