В моем приложении iPhone/iPad я показываю UIDatePicker для времени. Он отобразит время в этом формате, 11:00. Когда пользователь нажимает на строку времени, мы расширяем временную строку, чтобы отобразить эту строку datePicker. У меня есть отметка времени в строке «начинается»: «11:00», // время суток в формате ISO-8601 Мне нужно показать это на колесе выбора в выбранное время, когда оно открывается. Для этого, в первую очередь, я получаю дату в 12 часов утра, используя https://stackoverflow.com/a/9040554/4082792. Затем я конвертирую заданное время (11:00) в число секунд и добавляю его в полночное время, чтобы получить текущее время. Это время находится в локальном часовом поясе (поскольку я указываю часовой пояс при использовании NSDateFormatter). Когда я пытаюсь setDate для UIDatePicker с этой датой, он дает мне неправильное время, хотя время верное в переменной NSDate. В 11:00 он дает мне 6:40, а местное время - 4:30. Итак, у меня есть два вопроса: 1) Почему на колесе неправильно время. 2) Как преобразовать NSDate из одного часового пояса в другой, мне нужно показать его в локальном формате времени.Локализовать NSDate и изменить часовой пояс NSDate
Отрывок:
NSString *strDate = @"11:00";
NSDate *date = [NSDate date];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSUInteger preservedComponents = (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit);
date = [calendar dateFromComponents:[calendar components:preservedComponents fromDate:date]];
///Start time
NSString *startTime = @"11:00";
NSArray *startTimeSeparatedByColon = [startTime componentsSeparatedByString:@":"]; /// From 22:10 to [22, 10];
NSInteger hourPartOfStart = startTimeSeparatedByColon[0] ? [startTimeSeparatedByColon[0] integerValue] : 0;
NSInteger minutePartOfStart = startTimeSeparatedByColon[1] ? [startTimeSeparatedByColon[1] integerValue] : 0;
NSTimeInterval totalTime = (hourPartOfStart*60*60+minutePartOfStart*60);
NSDate *finalDate = [NSDate dateWithTimeInterval:totalTime sinceDate:date];
NSDate *dt = [NSDate dateWithTimeInterval:[NSTimeZone localTimeZone].secondsFromGMT sinceDate:finalDate];
self.datePicker.date = dt;
Это вернет NSString, который не может быть использован в качестве NSDate на UIDatePicker. Поправьте меня, если я ошибаюсь. – iosCurator
Используйте только строку данных в вашем представлении выбора. –
после того, как вы захотите использовать Date, затем преобразуйте String To Date. –