Objective c IOS:取消传感器和取消传感器的问题

Objective c IOS:取消传感器和取消传感器的问题,objective-c,cocoa-touch,ios,nsdate,Objective C,Cocoa Touch,Ios,Nsdate,我想比较日期,我使用这个代码 在一个示例中,“我的日期”的日期值为: 日期1=2011年6月6日 日期2=2011年6月8日 如果dateSelected=7/06/2011,一切正常,但如果dateSelected=6/06/2011或dateSelected=8/06/2011,代码不会在我的“如果”中输入,为什么 试试这个: if (([date1 compare:dateSelected] == NSOrderedAscending) &&

我想比较日期,我使用这个代码

在一个示例中,“我的日期”的日期值为: 日期1=2011年6月6日 日期2=2011年6月8日

如果dateSelected=7/06/2011,一切正常,但如果dateSelected=6/06/2011或dateSelected=8/06/2011,代码不会在我的“如果”中输入,为什么

试试这个:

if (([date1 compare:dateSelected] == NSOrderedAscending) &&
                ([date2 compare:dateSelected]== NSOrderedDescending))
            {}

NSDates表示自UTC 1/1/2000 00:00以来的时间点。所以所有这些日期都有时间成分<代码>-比较:比较日期和时间

您可能真的想检查所选日期是否介于2011年6月6日00:00和2011年6月9日00:00之间。此外,您可能希望日期2011年6月6日00:00计入范围内。所以你需要像

NSComparisonResult compareStart = [date1 compare: selectedDate]; // date1 is 6/6/2011 00:00
NSComparisonResult compareEnd = [date2 compare: selectedDate];   // date2 is 9/6/2011 00:00

if ((compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame)
    && (compareEnd == NSOrderedDescending))
{
    // date is in the right range
}

对于与@blackguardian有相同问题的人:

Cannot initialize a parameter of type 'NSNumber *' with an lvalue of type 'NSDate *'

关于这样的事情:

NSDate* oldDate = [NSDate date];
BOOL older = ([[NSDate date] compare:oldDate] == NSOrderedDescending);

我不知道为什么,但您需要将“[NSDate]”转换为“NSDate*”。 这是有效的:

NSDate* oldDate = [NSDate date];
BOOL older = ([[(NSDate*)[NSDate date] compare:oldDate] == NSOrderedDescending);

不是我有一个警告“不兼容的指针类型将NSDate发送到NSNumber类型的参数”我试图利用[a比较:b]和[b比较:a]之间的差异来满足您对范围包含边界的要求。。。但我认为JeremyP的答案无论如何都是一个更好的答案。我曾经警告过“不兼容的指针类型将NSDate发送到NSNumber类型的参数”@blackguardian:只有当您尝试将日期与数字进行比较时,才会得到这个警告。如何设置日期1、日期2和所选日期?控制台中的结果是:2011-06-06 10:31:48.423项目[173:707]日期1:2011-06-06 08:30:57+0000 2011-06-06 10:31:48.429项目[173:707]日期2:2011-06-08 00:00+0000 2011-06-06 10:31:48.432项目[173:707]日期选择:2011-06-07 08:30:37+0000@blackguardian例如我不明白。你说“什么都没有”是什么意思?您希望日志上有注释吗?对于我的代码,如果
date1==selectedDate
它在范围内,这就是我与
sensorderedName
进行比较的原因。date2是您不希望在该范围内的第一个日期,这就是为什么我不将其与
SensorDeredName
NSDate* oldDate = [NSDate date];
BOOL older = ([[(NSDate*)[NSDate date] compare:oldDate] == NSOrderedDescending);