в приложении для iPhone, которое я сейчас разрабатываю, у меня есть некоторые проблемы с датами. Я не использую их широко, так что это довольно просто, но я почему-то все еще делаю это неправильно. Когда я передаю NSDate через простой UIDatePicker месяц / день / год, я выбираю, например, 24 декабря 2011 года. Однако, когда я распечатываю NSDate в соответствии с местным часовым поясом через NSDateFormatter, я получу вывод MM-DD-YY, который на день меньше выбранного дня. Вот весь мой соответствующий код ввода / вывода даты:
Я беру дату, связанную с пользовательским объектом через UIDatePicker, следующими методами:
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet // Protocol method for UIActionSheetDelegate
{
// Among other things, add our UIDatePicker to a UIActionSheet that we pop up.
NSDate* currentDate = [NSDate date];
[pickerView setDate:currentDate];
[pickerView setMaximumDate:currentDate];
[pickerView setDatePickerMode:UIDatePickerModeDate]; // We don't need time for this.
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{ // UIActionSheetDelegate Protocol method for saving date change if OK is selected, else if cancel is selected, do nothing.
[self.customObjectBeingInput setDate:[ourDatePicker date]]; // Set object date to selected date in date picker.
}
Что касается вывода даты в UILabel, которую я настроил, вот что там происходит:
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init]; // Format the date into human-readble format.
[dateformatter setDateFormat:@"MM-dd-yyyy"];
[dateformatter setTimeZone:[NSTimeZone systemTimeZone]];
[dateformatter setDateStyle:NSDateFormatterShortStyle];
NSString *formattedDate = [dateformatter stringFromDate:[self.customObject date]];
[[self.customViewController customObjectDateLabel] setText:formattedDate];
[dateformatter release];
dateformatter = nil;
Должен ли я устанавливать что-то, связанное с часовыми поясами для входа UIDatePicker
, или, поскольку NSDate
возвращает абсолютный момент времени независимо от часового пояса пользователя, мы можем вообще игнорировать проблемы с местностью, по крайней мере, в вход каскад?
Я определенно думаю, что это связано с выходным каскадом, а не с тем, как я принимаю дату через UIDatePicker
, но я в растерянности относительно того, что я делаю неправильно или не делаю в все.