2012-09-14 29 views
11

Mam ciąg "2012-09-16 23:59:59 JST" Chcę przekonwertować ten ciąg daty na NSDate.NSDate ze stringa

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 JST"]; 
NSLog(@"%@", capturedStartDate); 

Ale to nie działa. Jest to wartość pusta. Proszę o pomoc ..

Odpowiedz

31

Przy zastosowaniu 24-godzinny, godziny specifier musi być kapitał H tak:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; 

Sprawdź tutaj poprawnych specyfikatorami: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

Jednak trzeba ustawić locale na dzień formater:

// Set the locale as needed in the formatter (this example uses Japanese) 
[dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]]; 

Pełny kod roboczych:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"]; 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 JST"]; 
NSLog(@"Captured Date %@", [capturedStartDate description]); 

wyjścia (GMT)

Captured Date 2012-09-16 14:59:59 +0000 
+0

hej @danielbeard, jak u że będzie on wykazywać czas GMT, które pokazują różnicę w czasie 9 godzin od dokładnej daty. Jak uzyskać dokładną datę z ciągu .. ?? .. – NiKKi

+0

Daty same nie mają stref czasowych, ale można uzyskać reprezentację ciągów w strefie czasowej z 'stringFromDate' z ustawionym powyżej NSDateFormatter. – danielbeard

+0

Zobacz tutaj, aby uzyskać więcej informacji http://stackoverflow.com/questions/1862905/nsdate-convert-date-to-gmt – danielbeard

1
NSString *dateString = @"01-02-2010"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

// this is imporant - we set our input date format to match our input string 
// if format doesn't match you'll get nil from your string, so be careful 

[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSDate *dateFromString = [[NSDate alloc] init]; 
// end 
dateFromString = [dateFormatter dateFromString:dateString]; 
[dateFormatter release]; 
6
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; 
NSDate *capturedStartDate = [dateFormatter dateFromString: @"2012-09-16 23:59:59 GMT-08:00"]; 
NSLog(@"%@", capturedStartDate); 
+1

Może to być przydatne komuś kiedyś: Keen.io timestamp format '[formatter setDateFormat: @" yyyy -MM-dd'T'HH: mm: ss.SSS'Z '"];' Nie musiałem ustawiać lokalizacji. –

+0

Odpowiedź była mi dziś przydatna;) –