Objective c UIDatePicker和日期选择

Objective c UIDatePicker和日期选择,objective-c,nsdate,Objective C,Nsdate,正在尝试使用uidatepicker。具有一个在日期选择器的值更改时激发的方法。它传递了日期值,但当我尝试获取该日期时,我的天数部分表现得很愚蠢。它返回自年初以来的天数,而不是实际的月份天数。比如说2月3日,而不是3日,我得到34分 -(IBAction)datePickerValueChanged: (id)sender; { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [da

正在尝试使用uidatepicker。具有一个在日期选择器的值更改时激发的方法。它传递了日期值,但当我尝试获取该日期时,我的天数部分表现得很愚蠢。它返回自年初以来的天数,而不是实际的月份天数。比如说2月3日,而不是3日,我得到34分

-(IBAction)datePickerValueChanged: (id)sender;
{        
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"YYYY-MM-DD"];

    self.date = [dateFormatter stringFromDate:[sender date]];
    NSLog(@"date: %@", [dateFormatter stringFromDate:[sender date]]);

    [dateFormatter release];
}
4月12日,我得到:

2011-10-27 14:22:41.939 Satshot[12789:40b] date02: 2011-04-102

我猜是我的dateformatter造成的,但我不明白为什么。

您使用了错误的格式说明符。您需要
“yyyy-MM-dd”

更新、YYYY和DD都是错误的。感谢@jrturton.

来自:

它使用yyyy指定年份组件。一个常见的错误是使用 YYYY。yyyy指定日历年,而yyyy指定年份 (指“一年中的一周”),用于ISO年-周日历。大多数 案例yyyy和yyyy产生相同的数字,但它们可能是相同的 不一样。通常,您应该使用日历年

此外,
DD
应该是
DD

但是为什么不直接用日期在内部保存你的价值呢


另外,请注意,创建日期格式化程序是一项昂贵的工作,当用户滚动浏览时,选择器视图上的valueChanged可能每秒调用数十次。如果必须使用格式化程序,请缓存它

你发现了DD,错过了YYYY,我发现了YYYY,错过了DD!所以你建议把我的格式化程序变成一个在viewDidLoad中设置的即时变量?或者valueChanged只是存储新的日期,当用户按下“选择”并让格式化程序在那里工作时?基本上只是防止每次值更改时都分配/释放格式化程序?实际上,我建议
self.date
应该是
NSDate
而不是
NSString
,并且只有在实际需要对值执行某些操作时才使用格式化程序,格式化程序是一个实例变量,因此您不会一直创建和销毁它。