views:

112

answers:

1

I created a CoreData application using the Cocoa Touch Template. I modified the included .xcdatamodel file to have an attribute called 'Date' with datatype of 'Date' and other string attributes.

I use following codes to save data for the 'Date' field:

NSDateFormatter *dateFormatter=[[[NSDateFormatter alloc] init] autorelease] ;
[dateFormatter setDateFormat:@"YYYY-MM-DD"];
NSDate *date= [[[NSDate alloc] init] autorelease];
date=[dateFormatter dateFromString:@"2010-03-01"];

[newManagedObject setValue:date forKey:@"Date"];

 NSError *error;
    if (![context save:&error]) {
        // Handle the error...
    }

To show the data in TableView I write following code in cellForRowAtIndexPath: method:

// Configure the cell.

NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];

//Formatting Date Portion of Name
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]  autorelease];
[dateFormatter setDateFormat:@"DD MMM YYYY"]; 

NSString *fName= [NSString stringWithFormat: @"%@: %@", [dateFormatter stringFromDate:[managedObject valueForKey:@"Date"]],[[managedObject valueForKey:@"Name"] description]];

I am really surprised that cell in TableView shows - 01 Jan 1970: Test

I also tried to use NSDateComponents instead of NSDateFormatter so I changed the code for saving date with:

    NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:1];
[comps setMonth:3];
[comps setYear:2010];
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release]; 

This time surprisingly cell displayed - 60 Mar 2010.

So I get 2 different but wrong values, but am unable to show the correct value which should be - 01 Mar 2010. I am really at loss of ideas on what could be going wrong here.

Can anybody suggest me where can I begin looking? Is there anything wrong with my code? Are there some well recognised issues with saving dates using CoreData?

Looking forward to your replies. Thanks in advance.

A: 

In the NSDateFormatter version, the format string should be @"yyyy-MM-dd" (lowercase y and d).

See date formatting patterns: http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns

For the NSDateComponents version, what is the code you used to display the date in the cell?

DyingCactus
Oh I feel stupid about that mistake. Thanks for taking time to respond. For displaying I was using same code, that's why NSDateComponents code was inserting date correctly, but I was displaying them in wrong format. In the case of NSDateFormatter I was inserting wrong date and displaying wrong date.Thanks for sharing very informative link on unicode.org. Thanks again.
Sachin Palewar