2011-04-07 16 views
8

problema de un principiante, pero me preguntaba si alguien me podría ayudar con esto:Objective-C: convertir cadena de fecha en los días de la semana + mes nombre

necesito fijar cuatro cuerdas de acuerdo con una cadena que contiene una fecha determinada (por ejemplo, @ "7 abr 2011"):

  • una cadena que tendrá el día de la semana (abreviado: lunes, martes, miércoles, jueves, viernes, sábado, domingo): por ejemplo, @"Thu"
  • una cadena que tomará el día, p. @"7"
  • una cadena que demorará el mes, p. @"April"
  • y una cadena que tomará el año, p. @"2011"

Hasta ahora, he encontrado esto:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:118800]; 

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocale]; 

NSLog(@"Date for locale %@: %@", 
     [[dateFormatter locale] localeIdentifier], [dateFormatter stringFromDate:date]); 
// Output: 
// Date for locale en_US: Jan 2, 2001 

Así que esto me daría una fecha determinada con formato. Me preguntaba, sin embargo, cómo puedo acceder a ciertas partes de esta fecha. Está el - (NSArray *) DaysSymbols, pero no tengo idea de cómo trabajar éste y la documentación es bastante frugal.

Cualquier sugerencia de los expertos en calendarios sería muy bienvenida.


EDIT:

supongo que esto es parte de la solución:

NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
NSString *gbFormatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMM" options:0 locale:gbLocale]; 
NSLog(@"gbFormatterString: %@", gbFormatString); 
// Output: gbFormatterString: EEE d MMM, e.g. Thu 7 Apr 

Respuesta

25

n.evermind,

Usted va a necesitar algo como esto:

NSDate *date = [NSDate date]; 
    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [formatter setDateFormat:@"MMM dd, yyy"]; 
    date = [formatter dateFromString:@"Apr 7, 2011"]; 
    NSLog(@"%@", [formatter stringFromDate:date]); 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSInteger units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit; 
    NSDateComponents *components = [calendar components:units fromDate:date]; 
    NSInteger year = [components year]; 
    NSInteger month=[components month];  // if necessary 
    NSInteger day = [components day]; 
    NSInteger weekday = [components weekday]; // if necessary 

    NSDateFormatter *weekDay = [[[NSDateFormatter alloc] init] autorelease]; 
    [weekDay setDateFormat:@"EEE"]; 

    NSDateFormatter *calMonth = [[[NSDateFormatter alloc] init] autorelease]; 
    [calMonth setDateFormat:@"MMMM"]; 

    NSLog(@"%@ %i %@ %i", [weekDay stringFromDate:date], day, [calMonth stringFromDate:date], year); 

salida

2011-04-07 12:49:23.519 test[7296:207] Apr 07, 2011 
2011-04-07 12:49:23.521 test[7296:207] Thu 7 April 2011 

Cheers, Jordan

+0

Muchas gracias. Esto es realmente útil y muy apreciado. –

+0

Solo otra cosa: ¿cómo puedo obtener la fecha de hoy? Es decir. en su ejemplo, es static date = [formatter dateFromString: @ "Apr 7, 2011"]; ¡Gracias por tu ayuda! –

+0

NSDate date = [NSDate date]; le dará la fecha de hoy. En ese caso, no necesita el primer NSDateFormatter en el código anterior. – Jordan

0

Usted debe echar un vistazo en NSDateFormatter

+0

Gracias, pero la documentación es bastante ir duro. Creo que necesito - (NSArray *) weekdaySymbols pero no tengo idea de cómo usar esto en mi contexto. –

0

@ n.evermind

En realidad debería mirar NSCalendar y específicamente el método - components:fromDate que le proporciona el objeto NSDateComponents que tiene todas las características que desea.

Cuestiones relacionadas