2010-12-02 57 views
1

J'essaie de trouver un moyen de convertir une chaîne en une date avec un identificateur de locale donné. J'ai par exemple une date italienne (locale: it_IT) Je veux convertir en un objet date valide.De la chaîne avec les paramètres régionaux à la date sur iphone sdk

NSDate *GLDateWithString(NSString *string, NSString *localeIdentifier) { 
    [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; 
    [formatter setLocale:locale]; 
    [locale release]; 

    NSDate *date = [formatter dateFromString:string]; 
    [formatter release]; 

    return date; 
} 

Ce code ne marche pas, la date est nulle. Je ne peux pas comprendre comment je devrais utiliser les paramètres régionaux pour mon but.

+0

Donner une chaîne exemple tu utilises – Anna

+0

J'ai posté la solution et un exemple ici, merci. – nebillo

Répondre

0

je luttais avec les formats allemands, ainsi il y a quelque temps et a résolu le problème en fournissant ma propre chaîne de formatage:

[formatter setDateFormat:@"dd.MMM.yyyy HH:mm:ss"]; 

Puis:

[dateFormatter dateFromString:@"01.Dez.2010 15:03:00"]; 

obtiendrez une NSDate correcte.

+0

Bien sûr, cela fonctionne, mais NSDateFormatter est censé choisir le format de date correct pour moi depuis que j'ai défini l'identificateur de paramètres régionaux. C'est ce que je pensais, peut-être que je me trompe. – nebillo

+0

Je suis d'accord. Le plus souvent, il y a juste une petite chose qui ne va pas avec votre entrée. Vous pouvez l'essayer avec la méthode getObjectValue de NSDateFormatter: forString: range: error: method. Peut-être retourné NSError vous fournit une explication raisonnable pourquoi il a échoué. – Kay

+0

merci kay, avec getObjectValue: ... fonctionne comme un charme! J'ai aussi dû définir un style de date/heure correct. J'ai posté la solution complète ici – nebillo

1

La solution est d'utiliser getObjectValue: forString: Gamme: Erreur: méthode de NSDateFormatter et régler la date et le suivi de l'annonce de style temps:

- (NSDate *)dateWithString:(NSString *)string locale:(NSString *)localeIdentifier { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setTimeStyle:NSDateFormatterNoStyle]; 
    [formatter setDateStyle:NSDateFormatterShortStyle]; 

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier]; 
    [formatter setLocale:locale]; 
    [locale release]; 

    NSDate *date = nil; 
    NSRange range = NSMakeRange(0, [string length]); 
    NSError *error = nil; 
    BOOL converted = NO; 
    converted = [formatter getObjectValue:&date forString:string range:&range error:&error]; 
    [formatter release]; 

    return converted? date : nil; 
} 

exemple:

NSString *italianDate = @"30/10/2010"; 
NSString *italianLocale = @"it_IT"; 

NSDate *date = [myCustomFormatter dateWithString:italianDate locale:italianLocale]; 
+0

Merci de poster, toujours bon d'avoir un échantillon de travail. Bienvenue en tant que professeur sur stackoverflow.com :-) – Kay