2009-11-04 1 views
0
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:@"2009-11-03T21:02:34-08:00"]; 
[inputFormatter release]; 
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 
[outputFormatter setDateFormat:@"HH:mm 'on' yyyy/MM/dd"]; 
[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 


NSString *newDateString = [outputFormatter stringFromDate:formatterDate]; 
NSLog(@"newDateString %@", newDateString); 

sortie de la date d'abord et l'heure après comment résoudre ce problème?Bug dans le NSDateFormatter lors de l'analyse de l'heure et de la date dans shortstyle

Je veux afficher l'heure dans le style court et que la date

Répondre

1

Lorsque vous réglez l'heure et la date des styles, vous remplacez le format de date que vous définissez manuellement.

Essayez ceci:

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:@"2009-11-03T21:02:34-08:00"]; 
[inputFormatter release]; 
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; 

//[outputFormatter setDateFormat:@"HH:mm 'on' yyyy/MM/dd"]; 
//[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
//[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 
//NSString *newDateString = [outputFormatter stringFromDate:formatterDate]; 

// format for time only 
[outputFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[outputFormatter setDateStyle:NSDateFormatterNoStyle]; 

// get time 
NSString *newTimeString = [outputFormatter stringFromDate:formatterDate]; 

// format for date only 
[outputFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[outputFormatter setDateStyle:NSDateFormatterShortStyle]; 

// get date and format with time 
NSString *newDateString = [NSString stringWithFormat:@"%@ on %@", newTimeString, [outputFormatter stringFromDate:formatterDate]]; 

NSLog(@"newDateString %@", newDateString); 
0

Réglage du timeStyle ou dateStyle signifie que le formatter ne tient pas compte du dateFormat que vous avez défini. Si vous toujours voulez que vos dates pour être au format 00:00 on 2009/11/04 quel que soit l'environnement local de l'utilisateur, vous devez définir les paramètres régionaux comme celui-ci:

NSDateFormatter*outputFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
NSLocale* locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
[outputFormatter setLocale:locale]; 
[outputFormatter setDateFormat:@"HH:mm 'on' yyyy/MM/dd"]; 

NSString* newDateString = [outputFormatter stringFromDate:formatterDate]; 

Notez que vous devez toujours définir les paramètres régionaux à en_US_POSIX si vous êtes traitant des dates lues par machine (par exemple ISO 8601), car certaines locales transformeront 'HH' en 'hh' ce qui peut avoir des résultats inattendus.

Questions connexes