Как проверить, находится ли дата в диапазоне, если год не указан в цели C - PullRequest
0 голосов
/ 12 декабря 2011

Есть ли способ проверить, находится ли объект NSDate в диапазоне дня месяца, не имея года в диапазоне.Например, у меня есть NSDate eqaual до 2 февраля 1956 года, и я хочу выяснить, находится ли эта дата в диапазоне между 10 января и 10 февраля в течение какого-либо года.

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 12 декабря 2011

Используйте NSCalendar и NSDateComponents.

например

// Assuming 'data' is a valid NSDate object
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit+NSDayCalendarUnit fromDate:date];
NSInteger day = components.day;
NSInteger month = components.month;
if ( (month>=startMonth && month<=endMonth) && (day>=startMonthDay && day<=endMonthDay)) {
// do your stuff
}
1 голос
/ 12 декабря 2011

Вы должны использовать NSDate 's -compare сообщение, или, используйте -timeIntervalSince1970

NSDate *startRange;
NSDate *endRange;

// method one
if (([myDate compare:startRange] > 0) &&  ([myDate compare:endRange] < 0))
{
    // execute code here
}

// method two
if (myDate.timeIntervalSince1970 > startRange.timeIntervalSince1970 && 
    myDate.timeIntervalSince1970 < endRange.timeIntervalSince1970)
{
     // execute code here
}
0 голосов
/ 12 декабря 2011

Вы можете использовать NSDateComponents для этого

    NSDate *date = [NSDate date];
    // setting units we would like to use in future
    unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSWeekdayCalendarUnit;
    // creating NSCalendar object
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // extracting components from date
    NSDateComponents *components = [calendar components:units fromDate:date];

    if (components.month <= 2 && components.month >= 1) {
         if (components.month == 2) {
                if (components.day <= 10) {
                       // Date is in range
                }
         } else if (components.month == 2) {
                if (components.day >= 10) {
                       // Date is in range
         }
    }
0 голосов
/ 12 декабря 2011

Вы можете получить текущий экземпляр NSCalendar и использовать компоненты: forDate: метод, а затем извлечь компоненты месяца и даты из результирующего объекта NSDateComponents .

...