2010-07-09 8 views
8

J'utilise le code suivant & son travail parfaitement bien dans l'iPhone OS 3,2pour l'iPhone OS 4.0 méthode « dateFromString » de NSDateFormatter renvoie nil

+(NSDate *)NSDateFromString:(NSString *)dateString 
{ 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dateObj=[dateFormatter dateFromString:dateString]; 
    [dateFormatter release], dateFormatter=nil; 
    return dateObj; 
} 

Mais quand j'ai essayé d'utiliser le même code que l'iPhone OS 4.0 le dateObj était nul.

La raison en est:

méthode - (id)init pour NSDateFormatter est uniquement disponible dans l'iPhone OS 2.0 à iPhone OS 3.2. Il est obsolète dans iPhone OS 4.0.

Maintenant, quelle est la solution pour cela? Comment init NSDateFormater? Quelle est l'alternative?

+0

Nous pouvons convertir NSString en NSDate en utilisant NSDateComponents comme: NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 6]; [comps setMonth: 5]; [comps setAnnée: 2004]; NSCalendar * gregorian = [[attribut NSCalendar] initWithCalendarIdentifier: NSGregorianCalendar]; NSDate * date = [grégorien dateFromComponents: comps]; [version de comps]; – Rambo

+3

Mais, maintenant que faire avec NSDateFormatter? Ne pouvons-nous pas l'utiliser avec IPhone OS 4.0? si oui alors comment? – Rambo

+1

juste parce que c'est déprécié ne veut pas dire que cela ne fonctionnera pas - il pourrait ne pas fonctionner dans le futur. Si vous __NSLog (@ "% @", dateFormatter); __ après avoir appelé init, qu'obtenez-vous? Si vous n'obtenez rien, cet avertissement n'a rien à voir avec votre problème. – deanWombourne

Répondre

2

- (id)init n'est pas déprécié pour NSDateFormatter dans iOS4. C'est une erreur dans la documentation.

+0

Je pensais que cela devait être le cas - est-ce documenté n'importe où sur les forums de développeurs Apple etc? –

2

[NSDateFormatter dateFormatFromTemplate: Options: locale:] pourrait mieux fonctionner

NSString *format = [NSDateFormatter 
        dateFormatFromTemplate:@"Mdjm" 
            options:0 
            locale:[NSLocale currentLocale]]; 

// "M/dh: mm a" // format anglais US retourné pour US locale

[dateFormatter setDateFormat:format]; 
NSDate *date = [dateFormatter dateFromString:dateString]; 
2

En iOS2.x et 3.x la fonction description NSDate/datefromstring renvoie: 2010-09-24 17:30:00 - 0700

dans iOS 4.1 il renvoie ceci: 2010- 09-25 00:30:00 GMT

Vous pourriez soumettre un bug à apple. Il ne suit même pas la spécification qui indique qu'il devrait retourner 0000 pour le décalage. Donc, non seulement il ne renvoie pas de date locale, mais il utilise aussi GMT au lieu d'un offset. Il semble que ce nouveau format ne soit pas compatible avec les méthodes NSDateFormatter.

Aussi, je ne pense pas que ce soit une erreur dans la documentation. Dans le document API Diff, il indique que init est supprimé pour NSDateFormatter.

+0

Encore plus déconcertant, les résultats varient si vous changez la configuration de votre appareil d'une horloge de 24 heures à une horloge de 12 heures: S –

Questions connexes