создать NSDate из строки - PullRequest
       19

создать NSDate из строки

27 голосов
/ 19 марта 2012

У меня есть NSString, как это: @"3/15/2012 9:15 PM", и я хотел бы преобразовать его в NSDate, я сделал так:

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

Можете ли вы помочь мне, пожалуйста, спасибо.

Ответы [ 4 ]

59 голосов
/ 19 марта 2012

Используйте следующее решение

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: Извините, формат должен быть следующим:

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

И показанное время будет временем по Гринвичу. Так что если вы добавите / вычтете часовой пояс, это будет 9:15 вечера.

Редактировать: # 2

Используйте как показано ниже. Вы бы тоже получили точное время.

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);
1 голос
/ 19 марта 2012

Ваш форматер неверен.Согласно документации NSDateFormatter это должно быть "MM / dd / yyyy h: mm a".Вы также, вероятно, захотите установить языковой стандарт, как указано в Руководстве по форматированию даты:

Если вы работаете с датами фиксированного формата, сначала следует установить для языка форматера даты нечто подходящее дляваш фиксированный формат.В большинстве случаев лучшим языком для выбора является en_US_POSIX, язык, специально разработанный для получения результатов на английском языке США, независимо от пользовательских и системных предпочтений.

Попробуйте:

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);

Выходы:

2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000
0 голосов
/ 19 марта 2012
  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 голосов
/ 19 марта 2012

Хммм - вы ошиблись по нескольким причинам

  1. NSDateFormatter строгий, и вы не были.
  2. вы не указали str для 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);
...