String formatted date picker date is off

2019-01-24 20:18发布

问题:

I have a UIDatePicker that only has month, day, and year. I am trying to output this selected date to a TextField using this code:

-(IBAction) dateChanged:(id)sender
{
    NSDate *date = datePicker.date;
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"M/d/YYYY"];
    expirationDateField.text = [df stringFromDate:date];
    [df release];
}

For most dates, this works, but for some reason, when I pick January 1, 2009, or January 2, 2009, I end up getting "1/1/2008" or "1/2/2008" (this isnt specific to 2009). I thought it was a time zone problem, but it wouldn't display the wrong year for January 2 if that were the case. Any ideas?

回答1:

Use lowercase yyyy for the year.

Uppercase YYYY returns the year of the start of the week that date falls in.
See Unicode Date Format Patterns.