2010-11-14 13 views
8

Spędziłem zbyt dużo czasu (ponad godzinę) na to, co byłbym choć dwuminutowym zadaniem. na iPhone:Konwersja np. 2010-09-11T00: 00: 00 + 01: 00 format do NSDate

NSString * dateString = @"2010-09-11T00:00:00+01:00"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssTZD"]; 
NSDate *date = [formatter dateFromString:dateString]; 

WYNIK: data == nil

Czego mi brakuje !! (Poza tym moim terminie)

Pozdrawiam,

Ken

+0

haha, wysłałem dokładnie to samo pytanie 10 minut temu: http://stackoverflow.com/questions/4179993 – samvermette

Odpowiedz

12

TZD nie jest zdefiniowanym formaterem na the unicode spec. Dokument, do którego linkowałeś w innym miejscu, był sugestią, że ktoś został stworzony do W3C, tylko do dyskusji. Standard Unicode, a następnie Apple jest gotowym standardem, z innego ciała.

Najbliższą rzeczą, której chcesz, byłby ZZZ (tj. @ "RRRR-MM-dd'T'HH: mm: ssZZZ"), ale nie ma w środku dwukropka. Musisz więc użyć ciągu:

2010-09-11T00:00:00+0100 

Zamiast tego, który obecnie masz, kończy się na +01: 00.

E.g. następujące:

NSString * dateString = @"2010-09-11T00:00:00+0100"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; 
NSDate *date = [formatter dateFromString:dateString]; 
NSLog(@"%@", date); 

Loguje obiekt z datą bieżącą, 2010-09-10 23:00:00 GMT.

+0

Dzięki za to. Ponieważ otrzymuję kody czasu w dwóch formatach ... + 01:00 I ... Z, tj. 2010-09-11T00: 00: 00Z, wystarczy dodać dwukropek z kodu czasowego +00: 00 i sprawdzić Z w przypadku, gdy nie był obecny i zmień kod na YYYY-MM-dd'T'HH: mm: ssZ w tym przypadku. - Mylące zdanie, ale jest za późno, jestem zmęczony ... Dzięki! – gnasher

2

Wskazówka: spróbuj za pomocą formatowania przekonwertować z obiektu NSDate do ciąg, a następnie zobaczyć, co dostajesz. Często łatwiej jest debugować w tym kierunku niż inne.

Czytałeś to?

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

To TZD na końcu formatu ciąg wygląda nieco podejrzanie.

+0

TZD to oznacznik strefy czasowej. Zobacz: http://www.w3.org/TR/NOTE-datetime – gnasher

+0

To inny standard niż ten, którego używa NSDateFormatter. Spójrz na link unicode.org. –

-1

Rozwiązałem ten problem, używając kodu this.

+1

Jaki kod ???? Przerwa łącza. – Brett

Powiązane problemy