Создать NSDate из строки
У меня есть NSString
, как это: @"3/15/2012 9:15 PM"
, и я хотел бы преобразовать его в NSDate
, я сделал вот так:
NSString *str [email protected]"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
Можете ли вы мне помочь, спасибо.
Ответы
Ответ 1
Используйте следующее решение
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";
И показанное время будет GMT. Поэтому, если вы добавите/вычтите часовой пояс, это будет 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);
Ответ 2
Ваш форматтер ошибочен. Согласно документации NSDateFormatter, она должна быть "MM/dd/yyyy h: mm a". Вероятно, вы также захотите установить локаль, как указано в Руководстве по форматированию даты:
Если вы работаете с датами фиксированного формата, вы должны сначала установить locale форматирования даты к чему-то подходящему для вашего фиксированного формат. В большинстве случаев наилучшим вариантом выбора является en_US_POSIX, 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);
Выходы:
2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000
Ответ 3
Хммм - вы ошиблись по нескольким причинам.
- NSDateFormatter является строгим, и вы не были.
- вы не указали 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);
Ответ 4
NSString *str [email protected]"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]);