2011-05-25 3 views
0

Comment puis-je analyser un NSString qui a ce formulaire "2011052620110529" pour obtenir chaque valeur comme un NSString? J'ai essayé d'écrire ceComment analyser une chaîne de date avec Objective-C

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"yyyyMMddyyyyMMdd"]; 

mais je ne pense pas qu'il soit correct ... Aidez-moi s'il vous plaît

Répondre

1

vous voulez analyser le nombre ou quoi? Vous êtes entendu pour lire des phrases ..

Jetez un oeil à NSString's class reference, il est assez facile de casser une chaîne en plusieurs parties.

[yourString subStringWithRange:NSMakeRange(location,length)]; 
0

Votre valeur NSString contient 2 dates, pas une. Vous ne pourrez donc pas utiliser NSDateFormatter pour l'analyser en une seule fois. Vous devrez analyser chaque date séparément en extrayant d'abord les 8 premiers caractères, puis les 8 derniers, en utilisant quelque chose comme [s substringWithRange:NSMakeRange(0,8)] et [s substringWithRange:NSMakeRange(8,8)]. Ensuite, vous pouvez passer ces sous-chaînes dans un formateur de date en utilisant un format comme "yyyyMMdd".

2

(je suppose ici que vous voulez dire « Parse dans les dates », pas « analyser en deux chaînes. » Votre question est pas claire.)

Cette chaîne ne représente pas un seul instant valable temps; il représente plutôt (vraisemblablement) une plage de temps.

Vous devrez diviser la chaîne en deux avant d'analyser les deux dates, puis obtenir l'intervalle entre les deux. En supposant que chaque composant comporte toujours 8 caractères:

NSString *strComplete = ...; 
NSString *strFirstDate = [strComplete substringToIndex: 8]; 
NSString *strSecondDate = [strComplete substringFromIndex: 8]; 

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
[formatter setDateFormat:@"yyyyMMdd"]; 
NSDate *firstDate = [formatter dateFromString: strFirstDate]; 
NSDate *secondDate = [formatter dateFromString: strSecondDate]; 

NSTimeInterval timeInterval = [secondDate timeIntervalSinceDate: firstDate]; 
Questions connexes