【发布时间】:2014-01-09 22:36:07
【问题描述】:
我想设置一个NSDate 对象,它可以告诉我指定日期是否在另外两个日期之间,但忽略年份。我的应用程序中有一些东西在圣诞节做一些特别的事情,我想在以后的几年里对它进行验证。我正在使用以下代码检查当前日期是否在 12 月 1 日和 12 月 31 日之间,但我必须指定年份(2013 年)。
我不太确定如何修改它以使其适用于任何年份 - 因为日期已转换为纯数字值,甚至可以做到吗?
+ (NSDate *)dateForDay:(NSInteger)day month:(NSInteger)month year:(NSInteger)year
{
NSDateComponents *comps = [NSDateComponents new];
[comps setDay:day];
[comps setMonth:month];
[comps setYear:year];
return [[NSCalendar currentCalendar] dateFromComponents:comps];
}
- (BOOL)laterThan:(NSDate *)date
{
if (self == date) {
return NO;
} else {
return [self compare:date] == NSOrderedDescending;
}
}
- (BOOL)earlierThan:(NSDate *)date
{
if (self == date) {
return NO;
} else {
return [self compare:date] == NSOrderedAscending;
}
}
【问题讨论】:
-
根据定义,NSDate 是自某个任意时间参考(1970 年 1 月或 2000 年 1 月,取决于您提出的问题)以来的秒数。它不单独包含月/日/小时/分钟/秒。
-
(当然,尽管您总是可以创建年份始终为 1970 或 2000 或其他任何时间的 NSDate 对象,然后进行比较。但是创建“MMddHHmmss”同样容易(可能更容易)字符串并将其用于所有交易。)
-
(但如果你确实使用了 NSDates,那么上面描述的用于比较 NSDates 的“类别”会更容易,更不容易出错。)
标签: ios objective-c date nsdate nscalendar