У меня есть 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 очень четко сказано, что свойство date
UIDatePicker
возвращает NSDate
.
Я также сделал некоторое протоколирование, чтобы увидеть именно то, что тип возвращается, и я обнаружил, что есть тонкое различие:
NSLog("%@", [self.datePicker.date class]); // logs "__NSDate"
NSLog("%@", [NSDate class]); // logs "NSDate"
Кто-нибудь сталкивался с этим, и если это так, что вы сделали для форматирования NSDate
? Я пытаюсь отформатировать дату как MM/dd
для использования в качестве ключа в объекте NSDictionary
, и мне нужен только месяц и дата, год и время не важны.
Нет, возвращенное значение из палитры не отформатирована в виде строки, это объект NSDate - если вы войдите в него, вы увидите строку, потому что то, что записано, является строкой, возвращаемой методом описания NSDate. Вы записали selectDate, чтобы убедиться, что это не ноль? Является ли строка «NSString * formattedDate = ...» тем же методом, что и при создании экземпляра вашего форматирования? – rdelmar
Код выглядит правильно. Если 'selectedDate' не равен нулю, я бы ожидал, что это что-то вернет. Вы можете попробовать установить «dateStyle» в один из стандартных и, возможно, перейти к известному хорошему объекту «NSDate», например '[NSDate date]'. –
@rdelmar, я записал selectedDate, и это не ноль. Я действительно создал свой собственный класс DateFormatter, так как я отформатировал все даты, используемые в моем приложении, таким же образом. Вместо того, чтобы повторять одно и то же несколько строк снова и снова, я решил, что это поможет. В настоящее время я настроил его как свойство в своем классе и создаю экземпляр нового экземпляра в getter – heymrcarter