UIDatePicker en de selectie van de dag

een uidatepicker proberen te gebruiken. hebben een methode die wordt geactiveerd wanneer de waarde van de datepicker verandert. het passeert de datumwaarde, maar wanneer ik probeer die datum te nemen, is mijn dagenportie goofy. het geeft het aantal dagen terug sinds het begin van het jaar, niet de werkelijke maanddag. dus zeg 3 februari, in plaats van 3 krijg ik 34.

-(IBAction)datePickerValueChanged: (id)sender;
{        
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"YYYY-MM-DD"];

    self.date = [dateFormatter stringFromDate:[sender date]];
    NSLog(@"date: %@", [dateFormatter stringFromDate:[sender date]]);

    [dateFormatter release];
}

voor 12 april krijg ik:

2011-10-27 14:22:41.939 Satshot[12789:40b] date02: 2011-04-102

Ik vermoed dat mijn dateformater het veroorzaakt, maar ik begrijp niet waarom.

2

2 antwoord

You are using the wrong format specifier. You need "yyyy-MM-dd"

http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns

Update, YYYY en DD hebben allebei ongelijk. Bedankt @ jrturton.

4
toegevoegd
Je zag DD en miste YYYY, ik zag YYYY en miste DD!
toegevoegd de auteur jrturton, de bron

Van de Handleiding voor gegevensopmaak :

Het gebruikt yyyy om de jaarcomponent op te geven. Een veelgemaakte fout is om te gebruiken   YYYY. yyyy geeft het kalenderjaar aan, terwijl YYYY het jaar aangeeft   (van "Week van het jaar"), gebruikt in de ISO-jaarkalender. In de meeste   Gevallen, JJJJ en JJJJ leveren hetzelfde aantal op, hoe ze ook mogen zijn   verschillend. Meestal moet u het kalenderjaar gebruiken.

Bovendien moet DD dd zijn.

Maar waarom zou u niet alleen de datum gebruiken om uw waarde intern vast te houden?

Merk ook op dat het maken van een datumformatter een dure oefening is, valueChanged op een picker-view zou tientallen keren per seconde kunnen worden opgeroepen naarmate de gebruiker er doorheen scrolt. Als u een formatter moet gebruiken, cachegeheugen.

3
toegevoegd
dus zou je voorstellen om van mijn formatter een instant variabele te maken die ingesteld wordt in viewDidLoad? Of hebben valueChanged gewoon de nieuwe datum opgeslagen en wanneer de gebruikers op de "select" drukken en de formatter daar laten werken? basislly gewoon voorkomen dat de formatter wordt toegewezen/vrijgegeven elke keer dat de waarde verandert?
toegevoegd de auteur Padin215, de bron
cool, ik zal kijken naar het maken van die verandering, bedankt.
toegevoegd de auteur Padin215, de bron
Eigenlijk zou ik suggereren dat self.date een NSDate is in plaats van een NSString en je gebruikt er alleen een formatter op wanneer je echt nodig hebt doe iets met de waarde, EN dat die formatter een instantievariabele is, zodat u deze niet altijd creëert en vernietigt.
toegevoegd de auteur jrturton, de bron