我要做的是使用大于小于符号的日期创建一个if语句。出于某种原因,只有大于号才有效。这是我的代码:
NSDate *currDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"HHmm"];
NSString *dateString = [dateFormatter stringFromDate:currDate];
NSLog(@"%@",dateString);
if (dateString < @"0810" && dateString > @"0800") {
NSLog(@"Homeroom");
}
else {
NSLog(@"no");
}
此代码的输出将是时间是8:03:
2013-04-08 08:03:47.956 Schedule2.0[13200:c07] 0803
2013-04-08 08:03:47.957 Schedule2.0[13200:c07] no
如果我是这样做的话只有那么大的标志就是这样:
if (dateString > @"0800") {
NSLog(@"Homeroom");
}
else {
NSLog(@"no");
}
输出将是:
2013-04-08 08:03:29.748 Schedule2.0[14994:c07] 0803
2013-04-08 08:03:29.749 Schedule2.0[14994:c07] Homeroom
答案 0 :(得分:3)
创建一个NSDate对象,时间为8:10,另一个为8:00。现在,您可以将给定日期与这两个日期进行比较
if(([date0800 compare:date] == NSOrderingAscending) && [date0810 compare:date] == NSOrderingDescending) )
{
// date is between the other
}
创建可以执行此操作的边界日期
NSDate *date = [NSDate date]; // now
NSDateComponents *components = [[NSCalendar currentCalendar] components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ) fromDate:date];
components.hour = 8;
components.minute = 0;
NSDate *date0800 = [[NSCalendar currentCalendar] dateFromComponents: components];
components.minute = 10;
NSDate *date0810 = [[NSCalendar currentCalendar] dateFromComponents: components];
如果您坚持使用<
和>
等运算符,则可以使用日期对象的时间间隔。
if(([date0800 timeIntervalSince1970] < [date timeIntervalSince1970]) && ([date0810 timeIntervalSince1970] > [date timeIntervalSince1970]))
{
// date lays between the other two
}
但请注意检查==
,因为舍入错误可能会导致错误。
答案 1 :(得分:1)
在这里,您要比较<
和>
的字符串对象,这些对象不能满足您的期望。您可以使用NSDateComponents
获取时间和分钟来比较这些:
NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components =
[gregorian components:(NSHourCalendarUnit | NSMinuteCalendarUnit ) fromDate:today];
NSInteger hour = [weekdayComponents hour];
NSInteger minutes = [weekdayComponents minute];
BOOL homeroom = (hour == 8) && (minute < 10);
或者您可以使用NSDateFormater并使用compare:
函数为8:10和8:00创建特定的NSDate。
答案 2 :(得分:0)
NSString
个对象是对象,当您将对象与C比较运算符(==,&gt;,&lt;等等)进行比较时,您要比较它们的地址,而不是它们的值。您需要使用compare
,例如:
if ([dateString compare:@"0810"] == NSOrderedAscending &&
[dateString compare:@"0800"] == NSOrderedDescending) { ...
如果您想要比较日期和时间,我建议在大多数情况下转换为NSDate
个对象。
答案 3 :(得分:0)
你不能使用&gt;或者&lt;比较字符串对象。这实际上比较了指针,所以我们不会理解为什么&gt; '工作'和&lt; '不'。
对于这种日期比较,请使用NSDateComponents NSDateComponents Reference
答案 4 :(得分:0)
这是我在NSDate上写的类别的要点。我发现它使我的代码更具可读性。
https://gist.github.com/nall/5341477
@interface NSDate(SZRelationalOperators)
-(BOOL)isLessThan:(NSDate*)theDate;
-(BOOL)isLessThanOrEqualTo:(NSDate*)theDate;
-(BOOL)isGreaterThan:(NSDate*)theDate;
-(BOOL)isGreaterThanOrEqualTo:(NSDate*)theDate;
@end