我有一个带有2个按钮的UIViewController:今天和昨天。每次客户端今天点击它都需要设置今天的属性_date和昨天的相同。
我设置属性值的方法如下:
-(IBAction)dateButtonTouched:(id)sender
{
if(![sender isSelected])
{
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];
[components setMinute:-[components minute]];
[components setSecond:-[components second]];
if([sender tag] == YESTERDAY)
{
[components setHour:-24];
_date= [cal dateByAddingComponents:components toDate: [NSDate date] options:0]; //YESTERDAY
}
else
{
NSDate *today = [NSDate date];
[components setHour:0];
_date= [cal dateByAddingComponents:components toDate: today options:0]; //TODAY
}
NSLog(@"user selected date %@",_date);
}
}
在下面的方法中,我试图检查_date是今天还是昨天:
-(void) viewWillLayoutSubviews
{
NSDateFormatter *dateFormat = [NSDateFormatter new];
[dateFormat setDateFormat:@"MM-dd-YY"];
self.dateLabel.text = [dateFormat stringFromDate:_date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];
[components setMinute:-[components minute]];
[components setSecond:-[components second]];
[components setHour:0];
NSDate *today = [cal dateByAddingComponents:components toDate: [NSDate date] options:0]; //TODAY
[components setHour:-24];
NSDate *yesterday = [cal dateByAddingComponents:components toDate: [NSDate date] options:0]; //YESTERDAY
if([_date isEqualToDate:yesterday])
{
//do something
}
else if( [_date isEqualToDate:today])
{
//do something
}
}
_date从来没有今天或昨天,但如果我调试它,打印它或比较描述是相同的。
答案 0 :(得分:0)
NSDate
实例表示特定时刻。它比昨天和#34;更具体。或"今天"。而不是尝试通过日期组件重置小时,分钟和秒,也许您应该比较您感兴趣的组件:日,月和年。或者您可以使用日历在组件级别进行比较:
NSDate *today = [NSDate date];
NSDate *someDay; // the date to compare
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *difference = [cal components:NSDayCalendarUnit fromDate:today toDate:someDay options:nil];
if (difference.day == -1) {
// yesterday
} else if (difference.day == 0) {
// today
}
如果不确切知道自己想做什么,就更难以更具体。
答案 1 :(得分:0)
NSDate对象包含日期和时间,编码为一个基本上是自2000年1月1日以来的微秒数的值。
当您进行两次连续的[NSDate date]
操作时,您将获得两个不同的值,如果不是因为时间实际上在两者之间发生了很大变化,那么因为大多数计算机时钟实现确保您在每次访问时获得不同的值。
NSDate的isEqualToDate
函数比较两个NSDate对象的所有位,看它们是否完全相等。这意味着,如果两者甚至相隔微秒,它们似乎不会相等。
如果要查看两个NSDate值是否在同一天,您应该使用NSDateFormatter将它们格式化为字符串并比较字符串,或者使用NSDateComponent函数之一来计算它们之间的天数(几种方法到这样做。)