web-dev-qa-db-fra.com

Conversion d'un format de date dans l'objectif C

Comment puis-je convertir la date suivante "Dim 17 juil 07:48:34 +0000 2011" au format suivant "2011-07-17 07:48:34"?

J'ai utilisé NSDateFormatter comme indiqué ci-dessous mais cela n'a pas fonctionné. Il donne null en conséquence.

NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];
30
farajnew

Votre format de date est incorrect pour le style de date que vous passez. Voici un document expliquant les différents modificateurs: Patterns de format de date

Pour analyser la date "Dim 17 juil 07:48:34 +0000 2011", vous auriez besoin d'un format comme ceci:

[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

Pour le mettre au format suivant: "2011-07-17 07:48:34", voici le code complet:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
NSDate *date  = [dateFormatter dateFromString:sDate];

// Convert to new Date Format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date]; 
68
Suhail Patel

Si sDate est votre chaîne au format "Sun Jul 17 07:48:34 +0000 2011", vous devez la convertir en NSDate. Ensuite, vous pouvez utiliser un deuxième NSDateFormatter pour convertir cette date dans le format souhaité "aaaa-MM-jj HH: mm: ss".

Si vous avez besoin de comprendre la chaîne nécessaire pour convertir, ce site a une grande référence: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

par exemple. "Dim 17 juil 07:48:34 +0000 2011" peut être analysé avec

[dateFormatter setDateFormat:@"EEE MMM d HH:mm:ss ZZZ yyyy"];

Comme conseil, des dates non standard comme "Jul" (devrait être juillet) peuvent poser problème ici. Il est plus rapide de simplement convertir les parties nécessaires en C simple, avec strftime (). Voir la référence: http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst263.htm =

Vous pouvez ensuite reconvertir l'horodatage Unix dans un NSDate avec

[NSDate dateWithTimeIntervalSince1970:]

L'utilisation de C pour l'analyse de date/heure est généralement jusqu'à 10 fois plus rapide. NSDateFormatter est un chien lent.

2
steipete