0

そこで、このメソッドを使用して文字列を 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 日であることを示していますが、componentその日付は 14 日です。

更新- シミュレーターでコードを試してみたところ、正常に動作したため、問題は iPhone 4 にあります。

4

0 に答える 0