0

我有 as NSDatePicker,我在哪里输入 0023,我希望它将它更改为2023。我的逻辑是基于 +-50 年转换yy为。yyyy

但是默认行为将NSDatePicker其更改为0023等。

我需要做什么才能yyyy以最近 50 年范围的格式显示。

有没有办法通过 Interface Builder 或通过代码来做到这一点。

您的帮助将是非常可观的。

4

1 回答 1

0

它不会“更改”00230023,而是将其保留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 常量

但最好在数字被解释为年份之前捕获错误的年份数字,否则日期可能无效。

于 2013-08-08T08:23:42.250 回答