2016-03-31 8 views
-1

Ich habe dateString mit diesem Format "mm/dd/yyyy '-' HH:mm". Ich möchte das Datum in Zeichenfolge und Stunde in Zeichenfolge extrahieren. Ich habe den folgenden Code versucht, aber dies ein falsches Datum zurück:Datum und Stunde aus NSDate extrahieren - Ziel C

- (void) extractDate: (NSString *)dateString intoHour: (NSString *)hourLabel and: (NSString*)dateLabel { 
    NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"mm/dd/yyyy '-' HH:mm"]; 
    NSData *date = [formatter dateFromString:dateString]; 

    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:date]; 

    hourLabel = [NSString stringWithFormat:@"%lu:%lu", [components hour], [components minute]]; 
    dateLabel = [NSString stringWithFormat:@"%lu/%lu/%lu", [components day], [components month], [components year]]; 
} 

Exemple String: "05/01/2015 - 11:15"

Ergebnis: Datum: 1/1/2015, Zeit: 11:15 und auch, wie kann ich das Datumsformat beibehalten dd/mm/yyyy , ich meine, wenn der Tag 1 ist, zeigt es 01

+0

'MM' für den Monat, sonst ist es Minuten (wie Sie es bereits verwendet haben). NSNumberFormatter kann bei Bedarf die führende Null verwenden. Oder Sie können einfach einen 'NSDateFormatter' vom angegebenen Datum verwenden, anstatt' NSDateComponents' zu verwenden: '[formatter setDateFormat: @" MM/dd/yyyy "]; dateLabel = [formatter stringFromDate: Datum]; [Formatierer setDateFormat: @ "HH: mm"]; hourLabel = [formatter stringFromDate: date]; 'Übrigens ist' hourLabel'/'dateLabel' als' NSString' und nicht 'UILabel' eine ziemlich irreführende Var-Benennung. – Larme

+0

Sie sollten 'NSDateFormatter' verwenden, um es zu tun. Aber für Ihr Interesse verwenden Sie '[NSString stringWithFormat: @"% 02d ", [Komponententag]]' würde den Job für Sie erledigen, – zcui93

+0

Wie 'NSDateFormatter' zu verwenden, um jedes Teil in einer Zeichenfolge zu erhalten –

Antwort

1

Nicht getestet, aber:

MM für den Monat. Nicht mm das ist Minuten.

Sie haben bereits eine NSDateFormatter also warum nicht wieder anstelle von NSDateComponents und NSString Formate verwenden?

NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
[formatter setDateFormat:@"MM/dd/yyyy '-' HH:mm"]; 
NSDate *date = [formatter dateFromString:dateString]; 

//Now you have the correct date. So we'll use the NSDateFormatter to transform NSDate (date) into NSString according to the format we need. 

[formatter setDateFormat:@"MM/dd/yyyy"]; 
dateLabel = [formatter stringFromDate:date]; 
[formatter setDateFormat:@"HH:mm"]; 
hourLabel = [formatter stringFromDate:date]; 

hourLabel/dateLabel als NSString und nicht UILabel ist eine ziemlich irreführend var Namensgebung.