2011-11-18 13 views
17

Próbowałem już sugestii w innych postach podobnych do tego bezskutecznie. Oto sytuacja:NSDateFormatter dateFromString podaje niewłaściwą datę

mam NSString tak:

Fri November 18, 2011 

i próbuję przekonwertować do daty jak ten:

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    [df setDateFormat:@"EE MMMM d, YYYY"]; 
    NSDate *myDate = [df dateFromString: dateString]; 

Ale zmienna MyDate wynikające posiada ten :

2010-12-31 00:00:00 +0000 

Czy ktoś ma pojęcie, dlaczego wybrano niewłaściwą datę od daty? omString? Ciąg ma 18 listopada, data konwersji 31 ​​grudnia ...

Dziękuję wszystkim!

+1

Należy zanotować wartość parametru dateString, aby upewnić się, że odpowiada oczekiwaniom. Spróbuj także użyć "EEE" zamiast "EE", "dd" zamiast "d", i "rrrr" zamiast "YYYY", aby wykluczyć wszelkie dziwactwa (choć wydaje się, że to powinno działać) –

+0

Dzięki Tim - "EEE MMMM d, rrrr" działa :-) – sweaves

Odpowiedz

48

Musisz użyć yyyy dla roku, a nie YYYY.

Z Apple reference:

Częstym błędem jest użycie rrrr. yyyy określa rok kalendarzowy, natomiast RRRR określa rok ("Tydzień roku"), używany w kalendarzu rocznym ISO. W większości przypadków rrrr i rrrr podają tę samą liczbę, ale mogą być inne. Zazwyczaj powinieneś używać roku kalendarzowego.

Należy również zmienić EE na EEE. Choć dają ten sam wynik w moim teście.

+1

Zmiana YYYY na yyyy i EE na EEE działała idealnie - dziękuję! – sweaves

+1

Świetna wskazówka, dzięki! – Chengjiong

+0

to działało !! ale dzieje się coś niezwykłego ... użyłem tego formatu, aby wydrukować wszystkie daty w roku 2013. Tylko grudzień 29,30,31 2013 był wyświetlany jako grudzień, 29,30,31 2014 .. co? !!? – iosMentalist

1

Myślę, że potrzebujesz "EEE MMMM d, YYYY", czyli potrójnego E jako łańcucha formatu. Jeśli to nie zadziała, zalecam stosowanie ciągów kodowanych na sztywno z łatwiejszymi datami i formatami, aby rozwiązać problem. Zobacz na przykład NSDateFormatter not working, aby uzyskać więcej wskazówek na ten temat.

+0

Zmiana EE na EEE była częścią 1 rozwiązanego problemu - dziękuję bardzo! – sweaves

Powiązane problemy