UIDatePicker返回错误的日期(实际日期为-1天)

Sma*_*ree 11 cocoa-touch objective-c uidatepicker ios

我有一个UIDatePickermm/dd/yy.它工作正常,但有一个问题:我设置minimummaximum约会它,当用户试图选择禁止的日,月或年,该[datePicker date]属性开始工作错误.它会返回current day - 1或者current month - 1current year - 1.我添加了一些图片,所以你可以看到情况.

正确的日期 这是对的
错误的约会 这是错误的(选择禁止日期后)

有人知道,我该如何解决这个问题?谢谢 !

UPD: 代码

[self.myDatePicker setMinimumDate:[NSDate date]];
[self.myDatePicker setMaximumDate:[[NSDate date] addTimeInterval:2 * 365.25 * 24 * 60 * 60]]; // to get upto 5 years
NSDate * now = [[NSDate alloc] init];
[self.myDatePicker setDate: now animated: YES];

self.myDatePicker.timeZone = [NSTimeZone localTimeZone];
self.myDatePicker.calendar = [NSCalendar currentCalendar];
Run Code Online (Sandbox Code Playgroud)

Joã*_*nes 6

我的解决方案是将返回的日期设置为12:00 AM,因为NSDates在UTC中工作

NSDate * adjustedDate = [[NSCalendar currentCalendar] dateBySettingHour:12 minute:0 second:0 ofDate:sender.date options:0];
Run Code Online (Sandbox Code Playgroud)

同样,对于日期计算,你应该使用NSCalender方法而不是addTimeInterval


Aru*_*dev 6

只需添加一行代码即可设置您的时区。

self.datePicker.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
Run Code Online (Sandbox Code Playgroud)

0是格林尼治标准时间00。根据您的时区添加。

  • 这应该是正确的答案,因为它实际上解决了(并解决)了核心问题,而不是试图制作黑客补丁。谢谢你,你帮我解决了一个大问题。 (2认同)

Ale*_*ien 5

检查是否使用大字母的错误格式符号:"YYYY".用"yyyy"替换它们.


Vik*_*ica 5

它与时区和/或夏令时非常相似.但它必须非常微妙,因为代码看起来很好(在间隔旁边).现在我的问题是你是否在俄罗斯:

今年,克里姆林宫在保持夏令时方面做了几次来回摆动.其实我不确定,他们最后决定了什么.但也许它在Cocoa中没有得到正确反映.视频WWDC 2011视频"会议117 - 执行日历计算",主持人甚至提到这样的事情可能发生.

请尝试使用手动设置时间到中午的日期,因为这将使您远离这样的混乱.


世界刚刚在iOS 6中看到了类似的错误行为:DND-Always-Active错误.我打赌这是错误的日期格式(YYYY而不是yyyy)


还要尝试首先在选择器上设置timezone属性,并为其分配一个手动实例化的公历.