web-dev-qa-db-fra.com

créer un NSDate à partir d'une chaîne

J'ai un NSString comme ceci: @"3/15/2012 9:15 PM" et je voudrais le convertir en NSDate, j'ai fait comme ceci:

NSString *str =@"3/15/2012 9:15 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"mm/dd/yyyy HH:mm"];
NSDate *date = [formatter dateFromString:];

NSLog(@"%@", date);  // date = null

Pouvez-vous m'aider s'il vous plaît, merci.

27
samir

Utilisez la solution suivante

NSString *str = @"3/15/2012 9:15 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"MM/dd/yyyy HH:mm a";

NSDate *date = [formatter dateFromString:str];

NSLog(@"%@", date);

Edit: Désolé, le format devrait être le suivant:

formatter.dateFormat = @"MM/dd/yyyy hh:mm a";

Et l'heure indiquée sera l'heure GMT. Donc, si vous ajoutez/soustrayez le fuseau horaire, il serait 21h15.

Modifier: # 2

Utilisez comme ci-dessous. Vous obtiendrez également l'heure exacte.

NSString *str = @"3/15/2012 9:15 PM";

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

formatter.dateFormat = @"MM/dd/yyyy hh:mm a";

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];

formatter.timeZone = gmt;

NSDate *date = [formatter dateFromString:str];

NSLog(@"%@",date);
59
Ilanchezhian

Votre formateur est incorrect. Selon la documentation NSDateFormatter, il doit s'agir de "MM/jj/aaaa h: mm a". Vous souhaitez également probablement définir les paramètres régionaux comme indiqué dans la directive de formatage de la date:

Si vous travaillez avec des dates au format fixe, vous devez d'abord définir les paramètres régionaux du formateur de date sur quelque chose de approprié pour votre format fixe. Dans la plupart des cas, le meilleur environnement local à choisir est en_US_POSIX, un environnement local spécialement conçu pour produire des résultats en anglais américain, quelles que soient les préférences de l'utilisateur et du système.

Essaye ça:

NSString *str = @"3/15/2012 9:15 AM";
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setLocale:enUSPOSIXLocale];
[formatter setDateFormat:@"MM/dd/yyyy h:mm a"];
NSDate *date = [formatter dateFromString:str];

NSLog(@"%@",date);

Les sorties:

2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000
1
user111823

Hmmm - vous vous êtes trompé pour plusieurs raisons

  1. le NSDateFormatter est strict et vous ne l'avez pas été.
  2. vous n'avez pas fourni str to dateFromString:
NSString* str = @"3/15/2012 9:15 PM";
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy HH:mm a"];
NSDate* date = [formatter dateFromString:str];


NSLog(@"%@",date);
0
Damo
  NSString *str =@"3/15/2012 9:15 PM";
NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
   [dateformatter setDateFormat:@"MM/dd/yyyy"];
NSArray *firstSplit = [str componentsSeparatedByString:@" "];
NSDate *dateSelected = [dateformatter dateFromString:[firstSplit objectAtIndex:0]];

    [dateformatter setDateFormat:@"mm:ss"];
NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]];
NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]);

NSLog(@"%@",[dateformatter stringFromDate:dateSelected]);
0
Rama Rao