DatePicker 返回 1 月 1 日的错误年份

DatePicker returns wrong year for Jan 1

提问人:tombuarts 提问时间:8/9/2011 最后编辑:Dave DeLongtombuarts 更新时间:8/9/2011 访问量:194

问:

我的应用程序中有一个 DatePicker 控件。例如,如果我尝试选择 2011 年 1 月 1 日,它将返回 2010 年 1 月 1 日。如果我选择 2040 年 1 月 1 日,则会得到 2039 年 1 月 1 日,依此类推。12 月 31 日和 1 月 2 日给了我选择的年份,所以这只是 1 月 1 日的问题。我已经检查了我的代码,我没有看到我搞砸这一年的任何地方。有什么想法吗?

代码如下:

datenow = chooseDate; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setDay:(int)daycount]; 
datenow = [calendar dateByAddingComponents:components toDate:datenow options:0]; 
dateComponents = [calendar components:unitFlags fromDate:datenow]; 
year = [dateComponents year]; 
month = [dateComponents month]; 
day = [dateComponents day]; 
hour = [dateComponents hour]; 
min = [dateComponents minute];
目标-C

评论

0赞 tombuarts 8/9/2011
chooseDate 是从 DatePicker 中选择的日期。这是代码;
0赞 tombuarts 8/9/2011
datenow = 选择日期;NSDateComponents *组件 = [[NSDateComponents 分配] 初始化];[组件 setDay:(int)daycount];datenow = [日历 dateByAddingComponents:组件 toDate:datenow 选项:0];dateComponents = [日历组件:unitFlags fromDate:datenow];year = [日期组件年份];month = [日期组件 month];day = [日期组件日];小时 = [dateComponents 小时];min = [日期组件分钟];
0赞 tombuarts 8/9/2011
在上面的代码中,对于此示例,daycount = 0。

答:

3赞 Dave DeLong 8/9/2011 #1

如果真的像你在评论中说的那样,那么这可能是你问题的根源。对象的属性应在日历定义的自然范围内。在公历的情况下,即 1-31。如果这一天超出了这个范围,那么单位就会开始环绕,你可能不会得到你想要的结果。daycount0dayNSDateComponents

评论

0赞 tombuarts 8/10/2011
我尝试了你的建议,但没有区别。我删除了代码的 daycount 部分,只使用了组件,我仍然得到了相同的结果。谢谢你试一试,我真的以为你有解决方案。
1赞 benzado 8/10/2011
Dave 在将 NSDateComponents 用作增量 () 的情况下是不正确的,就像在上面的代码中一样。 在这种情况下,仅表示不要更改月份的日期。dateByAddingComponents:daycount == 0