我经常使用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。
什么错了?它是否与夏令时有关?其他?感谢。
答案 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实际上似乎做了我想要的......