2011-01-13 14 views
5

I've been racking my brains bez powodzenia. Może ktoś mi powiedzieć jak chciałbym przekonwertować ten ciąg:Jak zmienić NSString w NSDate?

"2011-01-13T17: 00: 00 + 11: 00"

do NSDate?

+1

to sprawdzić: http://stackoverflow.com/questions/1353081/nsstring-to-nsdate – lms

Odpowiedz

20

Unicode format daty doc jest here

również do sytuacji, można spróbować to:

// original string 
NSString *str = [NSString stringWithFormat:@"2011-01-13T17:00:00+11:00"]; 

// convert to date 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
// ignore +11 and use timezone name instead of seconds from gmt 
[dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss'+11:00'"]; 
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]]; 
NSDate *dte = [dateFormat dateFromString:str]; 
NSLog(@"Date: %@", dte); 

// back to string 
NSDateFormatter *dateFormat2 = [[NSDateFormatter alloc] init]; 
[dateFormat2 setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; 
[dateFormat2 setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]]; 
NSString *dateString = [dateFormat2 stringFromDate:dte]; 
NSLog(@"DateString: %@", dateString); 

[dateFormat release]; 
    [dateFormat2 release]; 

Nadzieja to pomaga.

+0

Dziękuję, to jest idealne. Strefa czasowa w pojedynczych cudzysłowach nie była oczekiwana, ale to ją naprawiło :) – jennas

+0

nie mógł znaleźć "T" w środku. To pomogło. Dzięki! – user1244109

1

Czy spróbować to

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSDate *dateT = [dateFormatter dateFromString:str]; 

Cheers

+0

Cześć, tak mam to NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; NSDate * dateT = [dateFormatter dateFromString: @ "2011-01-13T17: 00: 00 + 11: 00"]; NSLog (@ "date From string:% @", dateT); To zwraca (zero) – jennas

+0

To pomoże ci http://stackoverflow.com/questions/4655199/how-to-set-date-format-retrieved- from-uidatepicker/4655297#4655297 – Aditya

+0

To jest złe, Nie działa w ogóle daje zerową datę. –

3

umieścić część T w apostrofach i sprawdzić dokumenty Unicode dla dokładnego formatowania. W moim przypadku mam coś podobnego, co robię:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSS"]; 

Znowu nie do końca taki sam, ale wpadł na pomysł. Należy również zachować ostrożność w strefach czasowych podczas konwersji w jedną i drugą stronę między łańcuchami i nsdates.

Ponownie, w moim przypadku, używam:

[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; 
+0

Hi, im ustawienie [NSTimeZone systemTimeZone], która jest prawidłową strefą. Następujące nadal zwraca null bloody thing![dateFormatter setDateFormat: @ "rrrr-MM-dd'T'hh: mm: ssSSS"]; – jennas

+0

To było dla mojego kodu, musisz zrobić coś podobnego do swojego kodu. Ponownie sprawdź dokumentację UNICODE. – tbone

0

Możesz sprawdzić TouchTime.

https://github.com/jheising/TouchTime.

To bezpośredni port niesamowitej funkcji strtotime w PHP w wersji 5.4 dla Cocoa i iOS. Potrwa prawie dowolny dowolny format ciągu daty lub czasu i przekształci go w NSDate.

Mam nadzieję, że działa i ciesz się!

0

Spróbuj użyć tego projektu z włączoną opcją cocoapods. Istnieje wiele dodatkowych funkcji, które prawdopodobnie będą również potrzebne.

"Kategoria rozszerzająca klasę NSDate firmy Cocoa z pewnymi wygodnymi funkcjami."

https://github.com/billymeltdown/nsdate-helper

Oto przykład z ich strony:

NSDate *date = [NSDate dateFromString:@"2009-03-01 12:15:23"]; 
+0

Ponadto, przeważnie szukaj teraz dla narzędzi na cocoapods. Oto zapytanie na NSDate. http://cocoapods.org/?q=NSDate –