比较日期 - 俯瞰小时部分

时间:2011-10-29 08:55:42

标签: iphone

我经常使用NSDate比较方法 - 但我想考虑两个相似的日期,如果它们在年,月,日相等。在比较之前,我已经制作了一个名为“cleanDate”的过程来删除小时部分。

-(NSDate*)cleanDate:(NSDate*)date {
    NSCalendarUnit unitflags;
    NSDateComponents *component;  
    NSCalendar *calendar;
    calendar=[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]autorelease];
    unitflags=NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    component=[calendar components:unitflags fromDate:date];
    return [calendar dateFromComponents:component]; //Dato uten klokke    
}

但我的约会时间如下:

2011-10-28 22:00:00 和一些日期: 2011-10-28 23:00:00

我希望小时部分相似,例如00:00。

什么错了?它是否与夏令时有关?其他?感谢。

2 个答案:

答案 0 :(得分:2)

-(NSDate*)cleanDate:(NSDate*)date {

            NSDateComponents *comps = [[NSCalendar currentCalendar] 
                                           components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit 
                                           fromDate:date];
                [comps setHour:0];
                [comps setMinute:0];    
                [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];

            return [[NSCalendar currentCalendar] dateFromComponents:comps];
}

答案 1 :(得分:0)

好像这是时区问题...... 我以为NSLog默认为本地时区 - 但它似乎默认为GMT ......

Date with GMT time zone is: Sat, 29 Oct 2011 22:00:00 GMT+00:00
Date with system time zone is: Sun, 30 Oct 2011 00:00:00 GMT+02:00
NSlog shows 2011-10-29 22:00:00 +0000

When using NSLog(@"NSlog shows %@",finalDate); it seems to print the GMT time... 
When using this code - I will get the local date in my time zone:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSString *dateString = [dateFormatter stringFromDate:myDate];
NSLog(@"Date with system time zone is: %@",dateString);

...所以我的原始cleanDate实际上似乎做了我想要的......