2010-12-02 5 views
10

Cela peut être une question stupide, mais je n'arrive pas à trouver la réponse ici ou dans la documentation.Convertir NSString d'une date en NSDate

Je souhaite convertir un NSString tel que @ "9/22/2010 3:45 PM" en un NSDate.

Je sais utiliser NSDateFormatter, mais les problèmes sont

  1. Le mois pourrait être un ou deux chiffres
  2. De même, la date pourrait être un ou deux chiffres
  3. heures pourrait être un ou deux chiffres
  4. Que dois-je faire pour AM/PM?

Répondre

26
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"MM/dd/yyyy h:mm a"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 
[dateFormat release]; 

il n'y a pas de problème à deux jours de chiffres ou 2 mois chiffres.

Cela doit vous aider.

+0

Cela devrait fonctionner. N'oubliez pas de lancer 'dateFormat'. –

+0

Hm ne fonctionnait pas. Je ne suis pas vraiment sûr de comment ça se passe. – Kevin

+0

J'ai reçu de ce 20/11/2010 14h00 à 2009-12-27 19:00:00 GMT. Ce qui n'est pas pareil, évidemment. – Kevin

3

Vous pouvez analyser un NSString dans un NSDate utilisant la classe NSDateFormatter. Voir the documentation pour plus d'informations:

Les instances de NSDateFormatter créer des représentations de chaîne d'objets NSDate (et NSCalendarDate), et convertir des représentations textuelles de dates et heures en objets NSDate.

2

je le même problème, ne sais pas pourquoi NSDateFormatter ne fonctionne pas pour moi (iOS5 - Xcode 4.3.2), mais cela a fonctionné pour moi:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSString *dateString = @"05-06-2012"; 
NSDate *date; 
NSError *error = nil; 
if (![dateFormatter getObjectValue:&date forString:dateString range:nil error:&error]) { 
    NSLog(@"Date '%@' could not be parsed: %@", dateString, error); 
} 
[dateFormatter release];