NSDateFormatter 返回完全错误的值

NSDateFormatter gives back totally wrong value

if (component != kDayComponent)
    {
        NSInteger i_d = [_datePicker selectedRowInComponent:kDayComponent],
        i_m = [_datePicker selectedRowInComponent:kMonthComponent],
        i_y = [_datePicker selectedRowInComponent:kYearComponent];

        NSString *d = _days[i_d];
//        NSString *m = [_months[i_m] length] == 1 ? [NSString stringWithFormat:@"0%@", _months[i_m]] : _months[i_m];
        NSString *m = i_m+1 < 10 ? [NSString stringWithFormat:@"0%d", i_m+1] : [NSString stringWithFormat:@"%d", i_m+1];
        NSInteger y = [_years[i_y] integerValue];
        NSString *completeDate = [NSString stringWithFormat:@"%@/%@/%ld", d, m, (long)y];

        NSDateFormatter *dateFormatter = [NSDateFormatter new];
        [dateFormatter setCalendar:[NSCalendar autoupdatingCurrentCalendar]];
        [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
        [dateFormatter setDateFormat:@"DD/MM/YYYY"];

        NSDate *refreshDate = [dateFormatter dateFromString:completeDate];

//        NSDate *refreshDate = [self dateFromMonth:m.integerValue+1
//                                          andYear:y
//                                           andDay:d.integerValue+1];
        NSLog(@"refreshDate: %@", refreshDate.description);

        [self refreshDaysFromDate:refreshDate];
    }

如您所见,completeDate 具有正确的字符串日期值,我正在尝试使用 NSDateFormatter 对其进行格式化并将值保存在 refreshDate 中。 问题是 refreshDate 返回完全错误的值,即使我确实设置了 NSTimeZoneNSCalendar.

修改日期格式 YYYYyyyy 你可以得到准确的值

[dateFormatter setDateFormat:@"dd/MM/yyyy"];

yyyy 指定日历年,而 YYYY 指定年份(“一年中的一周”),用于 ISO 年-周历。
在大多数情况下,yyyyYYYY 产生相同的数字,但它们可能不同。通常你应该使用日历年

仅修改日期格式化程序

dd/MM/yyyy

这对我有用。

您需要 "yyyy" 而不是 "YYYY" 和 "dd" 而不是 "DD"。

y = 年
Y = "Week of Year"

还有(感谢热舔):
d = 月中的第几天
D = 一年中的第几天

参见:ICU Formatting Dates and Times