我对UIDatePicker有一些奇怪的问题 . 我检查了论坛,我没有给出答案提供任何运气 .
假设我选择了一个日期,20/11/2010 EN_AUS语言环境 . 当我NSLog它时,日期属性是2010-11-19 13:00:00 0000.但是当我格式化它并在标签中显示它看起来是正确的,即20/11/2010?!
我保存此日期,以便下次用户进入此视图时,应自动在最后选择的日期设置uiDatePicker . 但它没有发生,它仍然显示当前日期 .
我列出了下面的重要代码,任何建议表示赞赏:)
// setting up the uiDatePicker
NSLocale *ozLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AUS"];
self.datePicker.calendar = [NSCalendar autoupdatingCurrentCalendar];
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:39600]]; // Melbourne time zone
[self.datePicker setLocale:ozLocale];
self.datePicker.timeZone = [NSTimeZone localTimeZone];
[ozLocale release];
// displaying the date from the uidatePicker
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
self.dateLabel.text = [dateFormatter stringFromDate:self.datePicker.date];
[dateFormatter release];
// In viewWillAppear I set the uiDatePicker. lastDatePicked has the value of 2010-11-19 13:00:00 +0000 at this point
[self.datePicker setDate:self.appDelegate.lastDatePicked animated:FALSE];
3 回答
首先,请注意
2010-11-19 13:00:00 +0000
是UTC格式,因此为EN_AUS格式化的日期将提前11个小时,这就是为什么在使用语言环境对其进行格式化时会看到20/11/2010
的原因 . 所以这根本不是问题,这是正确的行为 .我看到你的
setDate:animated:
行没有问题,所以我要确保self.appDelegate
和self.datePicker
实际上非正常位于该行之上 .设置手机时区时,苹果日期时间选择器中存在错误 . 自从它被发布以来,它一直存在于手机的所有版本中,这对我来说真的很痛苦(新西兰的格林威治标准时间为12/13,这似乎放大了问题) . 您可以在输入日期/时间的任何地方重现问题,例如iphone的联系人生日字段 .
我在某些地方读过这段代码有时会解决问题:
有关详细信息,请参阅this answer或this one .
使用此方法获取正确的日期:
}