NSDatePicker с датой в формате гг-гггг

У меня как NSDatePicker, где я ввожу 0023, и я ожидаю, что это изменит его на 2023, Моя логика заключается в преобразовании yy в yyyy на основании +-50 лет.

Но поведение по умолчанию NSDatePicker изменяет это на 0023 и т.п.

Что мне нужно сделать, чтобы показать в yyyy формат с ближайшим диапазоном 50 лет.

Есть ли способ сделать это через Interface Builder или через коды.

Ваша помощь будет весьма ощутимой.

1 ответ

Не "меняет" 0023 в 0023это оставляет на 0023, что правильно, правильное поведение. Вам нужно будет вручную проверить и исправить это самостоятельно. Может быть, как (не проверено):

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar
    components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit 
    fromDate:myPossiblyIncorrectDate
];
NSDate *correctedDate;

if ([components year] < 100) {
    NSUInteger currentYearLastDigits = 13; // Insert logic to get current year here.
    NSUInteger yearLastDigits = [components year];

    if (yearLastDigits > currentYearLastDigits) {
       [components setYear:1900 + yearLastDigits];
    } else {
       [components setYear:2000 + yearLastDigits];
    }

    correctedDate = [calendar dateFromComponents:components];
} else {
    correctedDate = myPossiblyIncorrectDate;
}

В зависимости от того, насколько вам это нужно, вы можете получить / установить больше компонентов. Смотрите константы NSCalendar.

Но было бы лучше поймать неправильный номер года, прежде чем номер будет даже интерпретирован как номер года, поскольку в противном случае дата может быть недействительной.

Другие вопросы по тегам