Ios NSDateComponents返回错误的日期(关闭10天)

Ios NSDateComponents返回错误的日期(关闭10天),ios,nsdate,nsdatecomponents,Ios,Nsdate,Nsdatecomponents,因此,我使用此方法将字符串转换为NSDate。数小时前,它工作正常,但突然间,NSDateComponents返回错误的日期。我不知道为什么 - (NSDate *)NSDateFromDate: (NSString *) str { NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM-dd"]; NSDate *date =

因此,我使用此方法将字符串转换为NSDate。数小时前,它工作正常,但突然间,
NSDateComponents
返回错误的日期。我不知道为什么

   - (NSDate *)NSDateFromDate: (NSString *) str
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"yyyy-MM-dd"];

    NSDate *date = [formatter dateFromString:str];

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // extracting components from date
    unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSWeekdayCalendarUnit;
    NSDateComponents *components = [calendar components:units fromDate:date];

    int dayIndex = [components weekday]; // sunday = 1
    int dayDate = [components day];
    NSLog(@"%@ => %@ (date = %i, weekday = %i) " ,str,date, dayDate, dayIndex);


    return date;
}
这是日志

2013-06-05 => 2013-06-04 17:17:56 +0000 (date = 14, weekday = 3) 
2013-06-06 => 2013-06-05 17:17:56 +0000 (date = 15, weekday = 4) 
2013-06-07 => 2013-06-06 17:17:56 +0000 (date = 16, weekday = 5) 
NSDate显示的是6月4日,但是
组件称日期是14日


更新-我在模拟器上尝试了代码,效果很好,所以问题出在我的iPhone 4上。

我得到了输出
2013-06-05=>2013-06-04 22:00:00+0000(date=5,weekday=4)
如果我用
2013-06-05
调用你的方法,这是正确的,因为我在GMT+2。你们有什么时区?还有什么没有显示的吗?我在GMT+7,代码在几个小时前就开始工作了,不确定是不是因为这里的时间刚刚过了午夜?“我真的不知道如何使用NSDate中的时区。@Martin没有其他东西了。这就是整个方法。