UIDatePickerとその日の選択

uidatepickerを使用しようとしています。 datepickerの値が変更されたときに起動するメソッドがあります。それは日付の値を渡しますが、私はその日を試してみると、私の日の部分はうんざりしています。実際の月の日ではなく、年の初めからの日数を返します。そう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がそれを引き起こしていると推測していますが、私は理由を理解していません。

2

2 答え

You are using the wrong format specifier. You need "yyyy-MM-dd"

http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns

更新、YYYYとDDはどちらも間違っています。ありがとう@jrturton。

4
追加された
あなたはDDを見つけてYYYYを逃した、私はYYYYを見つけ、DDを逃した!
追加された 著者 jrturton,

データフォーマットガイド

yyyyを使用して年のコンポーネントを指定します。よくある間違いは、   YYYY。 yyyyは暦年を指定し、YYYYは年を指定します。   (「今年の週」の)、ISO年 - 週カレンダーで使用されます。ほとんどの場合   ケース、yyyy、YYYYは同じ数字を返しますが、   異なる。通常、暦年を使用する必要があります。

また、 DD dd である必要があります。

なぜあなたの価値を内部的に保持するために日付を使用するだけではありませんか?

また、日付フォーマッタの作成はコストがかかることに注意してください。ピッカービューのvalueChangedは、ユーザーがスクロールするときに1秒間に数十回呼び出すことができます。フォーマッタを使用する必要がある場合は、キャッシュします。

3
追加された
私のフォーマッタをviewDidLoadに設定されたインスタント変数にすることをお勧めしますか?または、valueChangedに新しい日付を保存し、ユーザーが「選択」を押してフォーマッタを使用するとしたらどうですか?基本的には、値が変更されるたびにフォーマッタがallocaed/releaseされないようにするだけです。
追加された 著者 Padin215,
クール、私はその変更を作ることに、見ていきます、ありがとう。
追加された 著者 Padin215,
実際には、 NSString ではなく self.date NSDate にすることをお勧めします。そのフォーマッタがインスタンス変数であるため、常に作成および破棄しないという値を AND する必要があります。
追加された 著者 jrturton,