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.
Но было бы лучше поймать неправильный номер года, прежде чем номер будет даже интерпретирован как номер года, поскольку в противном случае дата может быть недействительной.