Не забудьте создать NSDate, а затем вывести его с правильным часовым поясом и календарем!
NSDate представляет только абсолютный момент времени. В нем нет понятия часового пояса (Нью-Йорк, Барселона, ...) или календаря (григорианский, иврит, ...).
UIDatePicker по умолчанию возвращает NSDate с системой NSCalendar и NSTimeZone , но при попытке распечатать его позже форматирование вывода не выполняется. Там может быть несоответствие.
Итак, во-первых, вам нужно правильно настроить UIDatePicker, а во-вторых, преобразовать вывод с помощью NSDateFormatter , чтобы он знал используемый календарь и часовой пояс.
Пример кода с инициализацией UIDatePicker и последующей печатью результата:
- (void)viewDidLoad
{
[super viewDidLoad];
// init the UIDatePicker with your values
// by default UIDatePicker inits with today, system calendar and timezone
// Only for teaching purposes I will init with default values
NSDate * now = [[NSDate alloc] init];
[_datePicker setDate: now]
animated: YES];
_datePicker.timeZone = [NSTimeZone localTimeZone];
_datePicker.calendar = [NSCalendar currentCalendar];
[_datePicker addTarget: self
action: @selector(getDatePickerSelection:)
forControlEvents:UIControlEventValueChanged];
}
-(void)getDatePickerSelection:(id) sender
{
// NSDateFormatter automatically inits with system calendar and timezone
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// Setup an output style
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
// Medium style date, short style time => "Nov 23, 1937 3:30pm"
NSString *dateString = [dateFormatter stringFromDate:date];
}
Проверьте ответ, который я сделал для другого очень похожего вопроса:
Вывод NSDate с использованием NSDateFormatter