ele*_*nse 9 iphone nsdate uitableview
嗯,我想这已被问了一千次,但由于某种原因,答案真的不起作用或有其他问题,....
无论如何这里是我"工作":
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init];
// set tomorrow (0: today, -1: yesterday)
[comps setDay:0];
NSDate *dateToday = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps setDay:-1];
NSDate *dateYesterday = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps release];
NSString *todayString = [self.dateFormatter stringFromDate:dateToday] ;
NSString *yesterdayString = [self.dateFormatter stringFromDate:dateYesterday] ;
NSString *refDateString = [self.dateFormatter stringFromDate:info.date];
if ([refDateString isEqualToString:todayString])
{
cell.title.text = @"Today";
} else if ([refDateString isEqualToString:yesterdayString])
{
cell.title.text = @"Yesterday";
} else
{
cell.title.text = [self.dateFormatter stringFromDate:info.date];
}
Run Code Online (Sandbox Code Playgroud)
现在问题:
对于日期比较而言,这似乎是一个非常多的代码,有更简单的方法吗?
最重要的问题是所有对象的发布.可能已经猜到了,我在UITableViewController中使用它.我的代码中也有这些行:
//[calendar release];
//[currentDate release];
//[dateToday release];
//[dateYesterday release];
//[todayString release];
//[yesterdayString release];
//[refDateString release];
Run Code Online (Sandbox Code Playgroud)
问题是,一旦我取消注释其中一行,我的应用程序崩溃了,我不明白为什么?!我希望有人能在这里启发我.
非常感谢.
moh*_*enr 13
最简单的方法是只比较description
日期:
// Your dates:
NSDate * today = [NSDate date];
NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400]; //86400 is the seconds in a day
NSDate * refDate; // your reference date
// 10 first characters of description is the calendar date:
NSString * todayString = [[today description] substringToIndex:10];
NSString * yesterdayString = [[yesterday description] substringToIndex:10];
NSString * refDateString = [[refDate description] substringToIndex:10];
if ([refDateString isEqualToString:todayString])
{
cell.title.text = @"Today";
} else if ([refDateString isEqualToString:yesterdayString])
{
cell.title.text = @"Yesterday";
} else
{
cell.title.text = refDateString;
}
Run Code Online (Sandbox Code Playgroud)
如果要更改可以使用的日期字符串的格式descriptionWithLocale:
.
我知道这是一个古老的问题,但我自己也做了类似的事情并且发现了它.
首先,自iOS 4.0(和Mac OS 10.6)以来,NSDateFormatter
可以做相对日期,这会自动给你"今天"和"昨天".
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setTimeStyle:NSDateFormatterNoStyle];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setDoesRelativeDateFormatting:YES];
NSString* dateString = [formatter stringFromDate:[NSDate date]];
NSLog( @"date = %@", dateString );
Run Code Online (Sandbox Code Playgroud)
哪个输出:
2014-03-15 15:26:37.683 TestApp[1293:303] date = Today
Run Code Online (Sandbox Code Playgroud)
然而,OP正在询问如何比较NSDate
今天或昨天,我也想做的事情,相对日期格式除外.这是我提出的,作为一个类别实现NSDate
:
@implementation NSDate (IsToday)
- (BOOL) isToday
{
NSCalendar* calendar = [NSCalendar currentCalendar];
// Components representing the day of our date.
NSDateComponents* dateComp = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:self];
NSDate* date = [calendar dateFromComponents:dateComp];
// Components representing today.
NSDateComponents* todayComp = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
fromDate:[NSDate date]];
NSDate* todayDate = [calendar dateFromComponents:todayComp];
// If the dates are equal, then our date is today.
return [date isEqualToDate:todayDate];
}
@end
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是,我可以显示今天创建的内容的时间,以及今天没有创建的日期 - 类似于Mail.app显示消息上的日期.它看起来像这样:
- (NSString*) postDateToString:(NSDate*)aDate
{
static NSDateFormatter* todayFormatter = nil;
if( todayFormatter == nil ) {
todayFormatter = [[NSDateFormatter alloc] init];
[todayFormatter setTimeStyle:NSDateFormatterShortStyle];
[todayFormatter setDateStyle:NSDateFormatterNoStyle];
}
static NSDateFormatter* notTodayFormatter = nil;
if( notTodayFormatter == nil ) {
notTodayFormatter = [[NSDateFormatter alloc] init];
[notTodayFormatter setTimeStyle:NSDateFormatterNoStyle];
[notTodayFormatter setDateStyle:NSDateFormatterShortStyle];
[notTodayFormatter setDoesRelativeDateFormatting:YES];
}
NSDateFormatter* formatter = notTodayFormatter;
if( [aDate isToday] ) {
formatter = todayFormatter;
}
return [formatter stringFromDate:aDate];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10694 次 |
最近记录: |