Ios NSCalendar发布的NSDate&x27;dateFromComponent

Ios NSCalendar发布的NSDate&x27;dateFromComponent,ios,nsdate,nscalendar,Ios,Nsdate,Nscalendar,我对此代码有问题: + (NSDate *)dateByMovingToBeginningOfDay:(NSDate *)date { unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDateComponents* parts

我对此代码有问题:

+ (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;
    }
}
+(NSDate*)日期通过移动日期开始日期:(NSDate*)日期
{
无符号整数标志=NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecond CalendarUnit;
NSDateComponents*parts=[[NSCalendar currentCalendar]components:flags fromDate:date];
[零件设置时间:0];
[零件设置分钟:0];
[第二部分:0];
返回[[NSCalendar currentCalendar]dateFromComponents:parts];
}
+(NSDate*)日期移动到内日期:(NSDate*)日期
{
无符号整数标志=NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecond CalendarUnit;
NSDateComponents*parts=[[NSCalendar currentCalendar]components:flags fromDate:date];
[每小时23部];;
[分钟:59];;
[第二部分:59];
返回[[NSCalendar currentCalendar]dateFromComponents:parts];
}
+(BOOL)checkForReportInDate:(NSDate*)dateforuser:(User*)User
{
AppDelegate*AppDelegate=(AppDelegate*)[[UIApplication sharedApplication]委托];
NSManagedObjectContext*context=appDelegate.managedObjectContext;
NSDate*startDate=[NSDate date BYMOVINGTOBEGININGOFDAY:date];
NSDate*endDate=[NSDate-dateByMovingToEndOfDay:date];
NSLog(@“申请日期:%@”,日期。说明);
NSLog(@“开始日期:%@”,开始日期说明);
NSLog(@“结束日期:%@”,结束日期。说明);
NSFetchRequest*fetchRequest=[[NSFetchRequest alloc]init];
fetchRequest.entity=[NSEntityDescription entityForName:@“Report”inManagedObjectContext:context];
fetchRequest.predicate=[NSPredicate predicateWithFormat:@“用户==%@和(日期>%@和日期<%@)”,用户,开始日期,结束日期];
fetchRequest.fetchLimit=1;
n错误*错误=nil;
NSInteger reportExist=[fetchRequest的上下文计数:fetchRequest错误:&error];
如果(错误!=nil){
NSLog(@“错误:%@,[Error localizedDescription]);
返回否;
}
如果(reportExist>0){
返回1;
}
否则{
返回0;
}
}
它生成了错误的开始日期。。。在我的控制台里

2012-04-12 14:34:46.456 iFood Pro[23820:fb03]将报告保存到数据库 2012-04-12 14:34:46.458 iFood Pro[23820:fb03]申请日期:2012-04-12:34:41+0000 2012-04-12 14:34:46.458 iFood Pro[23820:fb03]开始日期:2012-04-11 22:00:00+0000 2012-04-12 14:34:46.459 iFood Pro[23820:fb03]结束日期:2012-04-12 21:59:59+0000

开始日期应为2012-04-12 00:00:00+0000,而不是2012-04-11 22:00:00+0000
为什么会有这种行为?我快疯了

修复,问题是时区<代码>使用[parts setTimeZone:[NSTimeZone TimeZoneWithAbversion:@“UTC”]解决了问题

已修复,问题是时区<代码>使用[parts setTimeZone:[NSTimeZone TimeZoneWithAbversion:@“UTC”]解决问题

已修复,问题是时区。。。使用[parts setTimeZone:[NSTimeZone TimeZoneWithAbversion:@“UTC”];解决问题我如何才能接受我的评论作为正确答案?为您的问题添加一个答案(一个单独的答案,并且足够长,不会自动转换为评论),然后接受该答案。无法接受评论。已修复,问题是时区。。。使用[parts setTimeZone:[NSTimeZone TimeZoneWithAbversion:@“UTC”];解决问题我如何才能接受我的评论作为正确答案?为您的问题添加一个答案(一个单独的答案,并且足够长,不会自动转换为评论),然后接受该答案。无法接受评论。