我想设置一个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;
}
}
答案 0 :(得分:2)
听起来你需要做的就是确定NSDate是否会在12月份下降。我相信你可以这样做:
NSDate * now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *nowComponents = [gregorian components:NSMonthCalendarUnit fromDate:now];
if ([nowComponents month] == 12) {
// It's December, do something
}
如果您不希望被限制在整个月,您可以获得当前日期的月和日组件。
答案 1 :(得分:0)
为了判断一个日期是否在某一年的某个特定日期之后,我会使用以下内容:
// yearlessDate is in the form MMddHHmmss
+BOOL date:(NSDate*)theDate isLaterInYearThan:(NSString*)yearlessDate {
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"MMddHHmmss";
NSString* theDateFormatted = [fmt stringFromDate:theDate];
return [theDateFormatted compareTo:yearlessDate] == NSOrderedDescending;
}
通常的注意事项适用于时区,12/24设备设置等。将DateFormatter设为静态对象是最佳选择。