2015-04-30 3 views
0

В моем приложении 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; 

ответ

0

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

NSTimeZone *currentDateTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"EST"]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeZone:currentDateTimeZone]; 

Вы можете получить дату в «EST» часового пояса из этого dateFormatter объекта.

0

Преобразовать "EDT" TimeZone

NSString *format = @"EEEE dd-MMMM-yyyy HH:mm:ss z"; 
NSDateFormatter *date_EDTDateFormate = [[NSDateFormatter alloc] init]; 
date_EDTDateFormate setDateFormat:format]; 
date_EDTDateFormate setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EDT"]]; 
NSString *stringEDT = [dateFormatter_EDT stringFromDate:date_System]; 
+0

Это вернет NSString, который не может быть использован в качестве NSDate на UIDatePicker. Поправьте меня, если я ошибаюсь. – iosCurator

+0

Используйте только строку данных в вашем представлении выбора. –

+0

после того, как вы захотите использовать Date, затем преобразуйте String To Date. –

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