ich mit diesem Code ein Problem habe:NSDate von NSCalendar der dateFromComponent
+ (NSDate *)dateByMovingToBeginningOfDay:(NSDate *)date
{
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:date];
[parts setHour:0];
[parts setMinute:0];
[parts setSecond:0];
return [[NSCalendar currentCalendar] dateFromComponents:parts];
}
+ (NSDate *)dateByMovingToEndOfDay:(NSDate *)date
{
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *parts = [[NSCalendar currentCalendar] components:flags fromDate:date];
[parts setHour:23];
[parts setMinute:59];
[parts setSecond:59];
return [[NSCalendar currentCalendar] dateFromComponents:parts];
}
+ (BOOL)checkForReportInDate:(NSDate *)date forUser:(User *)user
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = appDelegate.managedObjectContext;
NSDate *startDate = [NSDate dateByMovingToBeginningOfDay:date];
NSDate *endDate = [NSDate dateByMovingToEndOfDay:date];
NSLog(@"apply date: %@", date.description);
NSLog(@"start date: %@", startDate.description);
NSLog(@"end date: %@", endDate.description);
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.entity = [NSEntityDescription entityForName:@"Report" inManagedObjectContext:context];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"user == %@ AND (date > %@ AND date < %@)", user, startDate, endDate];
fetchRequest.fetchLimit = 1;
NSError *error = nil;
NSUInteger reportExist = [context countForFetchRequest:fetchRequest error:&error];
if(error != nil) {
NSLog(@"Error: %@", [error localizedDescription]);
return NO;
}
if(reportExist > 0) {
return 1;
}
else {
return 0;
}
}
Es generiert falsches Startdatum ... in meiner Konsole Ich habe
2012-04-12 14:34: 46.456 iFood Pro [23820: fb03] Bericht in Datenbank speichern 2012-04-12 14: 34: 46.458 iFood Pro [23820: fb03] Datum der Anwendung: 2012-04-12 12:34:41 +0000 2012-04- 12 14: 34: 46.458 iFood Pro [23820: fb03] Startdatum: 2012-04-11 22:00:00 +0000 2012-04-12 14: 34: 46.459 iFood Pro [23820: fb03] Enddatum: 2012 -04-12 21:59:59 +0000
Startdatum sollte 2012-04-12 00:00:00 +0000 statt 2012-04-11 22:00:00 +0000 Warum dieses Verhaltens? Ich bin verrückt geworden!
fixiert löst, war das Problem der Zeitzone ... mit [Teilen setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @ "UTC"]]; löst das Problem – Progeny
Wie kann ich meinen Kommentar als die richtige Antwort akzeptieren? – Progeny
Fügen Sie eine Antwort zu Ihrer Frage hinzu (eine separate und lange genug, dass sie nicht automatisch in einen Kommentar umgewandelt wird), und akzeptieren Sie diese. Kann keinen Kommentar akzeptieren. –