2012-04-12 9 views
1

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!

+0

fixiert löst, war das Problem der Zeitzone ... mit [Teilen setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @ "UTC"]]; löst das Problem – Progeny

+0

Wie kann ich meinen Kommentar als die richtige Antwort akzeptieren? – Progeny

+0

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. –

Antwort

1

fixiert wurde das Problem der Zeitzone ... using [parts setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; das Problem