2014-03-08 5 views
2

У меня есть UIDatePicker, который установлен, чтобы просто выбрать дату (нет времени). Я хочу принять значение, которое пользователь выбирает и переформатирует. Возвращаемое значение включает дату, время и часовой пояс.Формат Дата верности с UIDatePicker

У меня есть NSDateFormatter, готовый к языку и формату, который я хочу установить. Проблема заключается в том, когда я пытаюсь форматировать дату, вызов метода из форматере возвращает ноль:

NSDate *pickedDate = self.datePicker.date; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"en_US"]]; 
[formatter setDateFormat: @"MM/dd"]; 

NSString *formattedDate = [formatter stringFromDate: pickedDate]; // nil 

Это выглядит так, как если возвращаемое значение из self.datePicker.date уже отформатирована в виде строки. Я читал, что NSDates не включают часовой пояс. Но в документации Apple очень четко сказано, что свойство dateUIDatePicker возвращает NSDate.

Я также сделал некоторое протоколирование, чтобы увидеть именно то, что тип возвращается, и я обнаружил, что есть тонкое различие:

NSLog("%@", [self.datePicker.date class]); // logs "__NSDate" 
NSLog("%@", [NSDate class]); // logs "NSDate" 

Кто-нибудь сталкивался с этим, и если это так, что вы сделали для форматирования NSDate? Я пытаюсь отформатировать дату как MM/dd для использования в качестве ключа в объекте NSDictionary, и мне нужен только месяц и дата, год и время не важны.

+2

Нет, возвращенное значение из палитры не отформатирована в виде строки, это объект NSDate - если вы войдите в него, вы увидите строку, потому что то, что записано, является строкой, возвращаемой методом описания NSDate. Вы записали selectDate, чтобы убедиться, что это не ноль? Является ли строка «NSString * formattedDate = ...» тем же методом, что и при создании экземпляра вашего форматирования? – rdelmar

+0

Код выглядит правильно. Если 'selectedDate' не равен нулю, я бы ожидал, что это что-то вернет. Вы можете попробовать установить «dateStyle» в один из стандартных и, возможно, перейти к известному хорошему объекту «NSDate», например '[NSDate date]'. –

+0

@rdelmar, я записал selectedDate, и это не ноль. Я действительно создал свой собственный класс DateFormatter, так как я отформатировал все даты, используемые в моем приложении, таким же образом. Вместо того, чтобы повторять одно и то же несколько строк снова и снова, я решил, что это поможет. В настоящее время я настроил его как свойство в своем классе и создаю экземпляр нового экземпляра в getter – heymrcarter

ответ

0

Не нужно определять часовой пояс & locale, он автоматически заберет вашу систему. использовать один и тот же код без declearing локаль и часовой пояс, я надеюсь, что это будет работать для вас ...

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MM/dd"]; 
NSString *dateString = [dateFormatter stringFromDate:self.datePicker.date]; 
Смежные вопросы