2015-09-09 2 views
1

У меня есть UIDatePicker и кнопка. Когда я нажимаю кнопку, я хочу отобразить в журнале сообщение «Установка напоминания для x», где x - время, отображаемое в списке выбора даты.UIDatePicker time

Каждый раз, когда я нажимаю кнопку, время занесено в журнал точно на 3 часа по сравнению с показателем, выбранным сборщиком (время, отображаемое сборщиком, является моим текущим временем). Я подозреваю, что это имеет какое-то отношение к часовому поясу. Я живу в часовом поясе GMT ​​+2 (я думаю, это +3, поскольку мы находимся в летнее время).

Вы не знаете, как я мог занести время, которое было таким же, как отображаемое время?

Ниже приведен метод, который выполняется, когда я нажимаю кнопку. Благодарю.

- (IBAction)addReminder:(id)sender { 
    [self.datePicker setTimeZone:[NSTimeZone systemTimeZone]]; 
    NSLog(@"Setting a reminder for %@", self.datePicker.date); 
} 
+1

возможно дубликат [Как преобразовать дату UTC строку по местному времени (systemTimeZone)] (http://stackoverflow.com/questions/11677520/how-to-convert -utc-date-string-to-local-time-systemtimezone) –

+0

Это также может быть проблемой с часовым поясом симулятора в отличие от вашего часового пояса. Проверьте настройки симулятора ios для получения дополнительной информации. – Devster101

+0

Время на симуляторе такое же, как в реальном времени. Я попытался изменить область на симуляторе iOS, и результат будет таким же. –

ответ

0

NSDate простое представление какой-то момент времени, он ничего не знает о местном времени. Когда вы регистрируете его (фактически, когда description) отправляется сообщение, он использует GMT для отображения.

UIDatePicker использует ваш часовой пояс по умолчанию (см. https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDatePicker_Class/#//apple_ref/occ/instp/UIDatePicker/timeZone).

Итак, вот как это работает:

  • Вы выбираете какое-то время в DatePicker, но время не имеет смысла, если не указан часовой пояс.
  • DatePicker использует ваш часовой пояс (GMT + 2) и создает для него NSDate.
  • Вы показываете NSDate, и поскольку он ничего не знает о часовом поясе, он просто отображает себя как GMT.

Чтобы показать свою дату, следует использовать NSDateFormatter. Имеет свойство Timezone: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/#//apple_ref/occ/instp/NSDateFormatter/timeZone

Вы также можете использовать NSCalendar и его компоненты.

Вы должны прочитать это руководство: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html, поскольку даты, форматы и календари не очень ясны в Cocoa, если вы не понимаете его концепций.

0

Попробуйте это ...

NSDate *now = [[NSDate alloc] init]; 
[self.datePicker setDate:now]; 
[self.picker setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:2*60*60]]; // GMT+2 Your timeZone 
NSLog(@"Setting a reminder for %@", self.datePicker.date);