2013-11-23 8 views
1

Мне нужно взять NSString 4 декабря 2012 года, 12:33 и конвертировать его, чтобы выделить месяц, день и год, чтобы я мог иметь 3 разных строки из 12, 04 и 2012.Преобразование NSString в NSDate и обратно в другой формат NSString

Я полагаю, что мне нужно преобразовать NSString в NSDate, а затем переформатировать дату, чтобы изменить NSString, но я столкнулся с проблемами.

у меня есть:

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

     [dateFormatter setDateFormat:@"MMM dd, yyyy, hh:mm p"]; 
     NSDate *dateFromString = [[NSDate alloc] init]; 

     dateFromString = [dateFormatter dateFromString:substring]; 
     NSLog(@"Date%@", dateFromString); 
     [dateFormatter release]; 

Однако дата продолжает возвращаться пустым.

+0

вы можете добавить задание подстроку ? – chancyWu

+0

@ user717452: ваша подстрока должна быть нулевой или не содержать полной даты. – TamilKing

+0

Подстрока - 4 декабря 2012 года, 12:33 – user717452

ответ

2

Преобразование

[dateFormatter setDateFormat:@"MMM dd, yyyy, hh:mm p"]; 

, потому МММ дд, гггг, чч: мм р не действительный даты формиата

[dateFormatter setDateFormat:@"MMM dd, yyyy, hh:mm a"]; 

И

NSDate *dateFromString = [dateFormatter dateFromString:substring]; 

Чтобы получить строку снова

NSLog(@"%@",[dateFormatter stringFromDate:dateFromString]); 

для меня NSLog это 4 декабря 2012, 12:33 вечера

+0

Это прекрасно работает, однако, когда я перехожу для преобразования даты в строку и отдельные компоненты, если дата является единственным числом, она оставляет ее как одно число, когда мне нужно 04, а не просто 4. – user717452

+0

@ user717452 вы также должны установить локаль - устройство с неанглийским языком не сможет проанализировать строку –

+0

@ user717452 см. мой обновленный ответ –

3

Проблема с вашей локалью, я думаю. Вы должны попытаться напечатать как ваши dateFormatter форматов текущей даты [NSDate new].

Это работает для меня:

NSString* substring = @"Dec 12 2012 12:08 PM"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setDateFormat:@"MMM d yyyy h:mm a"]; // not 'p' but 'a' 
NSDate *dateFromString = [dateFormatter dateFromString:substring]; 
+0

Ваш локатор настроек решил мою проблему для поддержки пользователей разных языков. Благодарю. – teapeng

0
#import "NSString+Date.h" 

@implementation NSString (Date) 

+ (NSDate*)stringDateFromString:(NSString*)string; 

{ 
NSString *dateString = @"01-02-2010"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
// this is imporant - we set our input date format to match our input string 
// if format doesn't match you'll get nil from your string, so be careful 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSDate *dateFromString = [[NSDate alloc] init]; 
// voila! 
dateFromString = [dateFormatter dateFromString:dateString]; 
return dateFromString; 
} 

+(NSString*)StringFromDate :(NSDate*)date; 

{ 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSString *stringDate = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"%@", stringDate); 
return stringDate; 
} 

`@end

Смежные вопросы