我在我的nib文件中有一个NSDatePicker。在代码中,我将其时区设置为GMT日历的时区:
[datePicker setTimeZone:[calendar timeZone]];
我只真正关心时间(小时,分钟)在我编程填充的日期选择器上:
NSDate *anyDate = [NSDate date];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:anyDate];
[components setHour:hours];
[components setMinute:minutes];
NSDate *newDate = [calendar dateFromComponents:components];
[datePicker setDateValue:newDate];
这正确地具有将日期选择器时间设置为我想要的时间的预期效果。因此,如果小时为8,分钟为30,日期选择器显示8:30。但是,如果我在日期选择器的小时字段中输入8,它将显示为3。有些地方的时区有点奇怪,但我不确定在哪里…
似乎我不是第一个遇到这个问题的人。对于那些感兴趣的人,我在这里找到了解决方案http://www.cocoabuilder.com/archive/cocoa/305254-nsdatepicker-weirdness-with-time.html。显然,如果您设置日期选择器的时区而不是日历,则会遇到此问题。分辨率如下:
[datePicker setTimeZone:[calendar timeZone]];
[datePicker setCalendar:calendar];