Разделить NSDate на год, месяц, дату - PullRequest
4 голосов
/ 12 февраля 2011

Если у меня есть дата, например 04-30-2006, как я могу разделить и получить месяц, день и год

Также есть прямой способ сравнения лет?

Ответы [ 4 ]

17 голосов
/ 12 февраля 2011

вы должны использовать NSDateComponents.Например:

NSDate *date = [NSDate date];
NSUInteger componentFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [[NSCalendar currentCalendar] components:componentFlags fromDate:date];
NSInteger year = [components year];
NSInteger month = [components month];
NSInteger day = [components day];

Также есть прямой способ сравнения лет?

не встроен. Но вы можете написать для него категорию.Как это:

@interface NSDate (YearCompare)
- (BOOL)yearIsEqualToDate:(NSDate *)compareDate;
@end

@implementation NSDate (YearCompare)

- (BOOL)yearIsEqualToDate:(NSDate *)compareDate {
    NSDateComponents *myComponents = [[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:self];
    NSDateComponents *otherComponents = [[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:compareDate];
    if ([myComponents year] == [otherComponents year]) {
        return YES;
    }
    return NO;
}

@end
2 голосов
/ 12 февраля 2011

разделить это легко

NSString *dateStr = [[NSDate date] description];

NSString *fStr = (NSString *)[[dateStr componentsSeparatedByString:@" "]objectAtIndex:0];
NSString *y = (NSString *)[[fStr componentsSeparatedByString:@"-"]objectAtIndex:0];
NSString *m = (NSString *)[[fStr componentsSeparatedByString:@"-"]objectAtIndex:1];
NSString *d = (NSString *)[[fStr componentsSeparatedByString:@"-"]objectAtIndex:2];

это будет легко получить вещи, которые вы хотите в принципе.

1 голос
/ 12 февраля 2011

Все ответы до сих пор предполагают, что у вас есть реальный объект NSDate, но в своем посте вы говорите: «У меня дата вроде 04-30-2006», которая может быть строкой.Если это строка, то ответ Абизема наиболее близок к тому, что вы хотите:

NSString* dateString = @"04-30-2006";
NSArray* parts = [dateString componentsSeparatedByString: @"-"];
NSString* month = [parts objectAtIndex: 0];
NSString* day = [parts objectAtIndex: 1];
NSString* year = [parts objectAtIndex: 2];
0 голосов
/ 12 февраля 2011

Или, используя NSDateFormatter:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *now = [NSDate date];

[formatter setDateFormat:@"MM"];
NSString *month = [formatter stringFromDate:now];
[formatter setDateFormat:@"dd"];
NSString *day = [formatter stringFromDate:now];
[formatter setDateFormat:@"yyyy"];
NSString *year = [formatter stringFromDate:now];

[formatter release];

(код, набранный прямо здесь;

...