2010-05-30 4 views
4

J'essaie de formater une date à partir d'une chaîne dans un autre format.Mettre en forme une date à partir d'une chaîne

Par exemple: 2012-05-29 23:55:52 en 29/05 *newline* 2010.

Je ne comprends pas la logique derrière NSDate et NSDateFormatter, je pense ..

Toute aide sera appréciée. Merci :)

+0

connexes: [Parsing formats de date non pris en charge dans via NSDate Cocoa] (http://stackoverflow.com/questions/399527/parsing-unsupported-date-formats-in-via-cocoas-nsdate) – miku

Répondre

9

Vous devez créer un NSDateFormatter, puis réglez-est dateFormat pour correspondre à la première date que vous avez, par exemple:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

qui fixeront votre formatter date de reconnaître votre chaîne de date. Vous pouvez ensuite obtenir un objet NSDate à partir de cet objet en utilisant

NSDate *myDate = [dateFormatter dateFromString:myDateString]; // myDateString is the 2012-05-29 23:55:52 string 

Cela vous donne un objet NSDate complet représentant cette date. Maintenant, vous devez reformater la date et le transformer en une chaîne, donc régler la dateFormat sur votre formatter au nouveau format, et d'obtenir une nouvelle représentation de chaîne de la date de retour:

[dateFormatter setDateFormat:@"dd/MM\nyyyy"]; 
NSString *newlyFormattedDateString = [dateFormatter stringFromDate:myDate]; 
[dateFormatter release], dateFormatter = nil; 

Et le tour est joué! Vous avez votre nouvelle date :)

+0

Merci ! Je ne savais pas que vous pourriez obtenir une chaîne d'une date de cette façon! Cela a fait l'affaire. – Emil

1

Si vous effectuez un traitement de chaîne simple, il n'est pas vraiment nécessaire de parcourir un objet de date.

let dateString = "2012-05-29 23:55:52" 
let dateParts = dateString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "- :")) 
let newDateString = "\(dateParts[2])/\(dateParts[1])\n\(dateParts[0])" 

print(newDateString) 
+0

Je n'y ai jamais pensé de cette façon - c'est en fait une excellente solution, et elle utilise probablement moins de ressources qu'un objet date. Merci! – Emil

Questions connexes