NSDatePicker,日期为yy到yyyy格式

时间:2013-08-08 08:03:35

标签: objective-c macos cocoa nsdatepicker

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

NSDatePicker的默认行为会将其更改为0023等。

我需要做的是以最近50年的yyyy格式显示。

有没有办法通过Interface Builder或代码来实现。

你的帮助将非常明显。

1 个答案:

答案 0 :(得分:0)

它不会将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 constants

但最好在之前找到错误的年份数,否则该数字甚至会被解释为年数,否则日期可能无效。